Nginx浅析

tomcate集群中的负载均衡

负载均衡

负载

访问压力,上千万,几百万的访问

均衡

平均分配(物理平均,逻辑平均)

nginx

Nginx 是一个高性能的HTTP和反向代理web服务器

http服务

接受http请求,处理返回http响应

tomcat 也是http服务(tomcat处理动态数据)

反向代理

服务器根据客户端的请求

从其关联的一组或多组后端(如Web服务器)上获取资源

正向代理

客户端向服务器端发出的请求

niginx的window安装

解压安装包即可使用

文件结构

conf

nginx配置文件,核心加载nginx.conf所在路径

logs 日志文件

access.log,error.log

access.log通过nginx访问的客户端浏览记录

error.log记录nginx启动运行的各种错误

nginx的启动和停止

扩展了3个文件bat

nginx_start.bat:启动文件

nginx_stop.bat:停止

nginx_reload.bat:禁止使用

nginx入门测试案例

负载均衡:对后端集群的负载均衡访问

动静分离:将静态文件img,js,css,html放到nginx处理,不需要占用后端服务器的资源了

 
conf文件夹下的核心配置文件nginx.conf
  自定义配置一个server{}
        server { //server表示一个虚拟的服务器,每一个虚拟服务器都可以根据配置接收http请求,返回http相应
                listen       80; //监听的端口号,满足端口号的请求才能继续判断
                server_name  www.order.com; //通过请求头HOST头携带的域名判断所属权
                location / { //用来匹配域名和端口后的字符串的
                http://www.order.com/user/query/point?userId=1 可以通过不同的location来定义不同的请求地址的处理逻辑,/表示通配,任意地址都能匹配
                 proxy_pass http://127.0.0.1:8090/; //指向真正转发到的后端服务器地址
              }
          }
          
        server {
                listen       80;
                server_name  www.order.com;
                location / {
                    proxy_pass http://127.0.0.1:8090/;
                }
            }
nginx转发的流转逻辑

  1.客户端发出请求

  2.host文件根据端口号域名进行解析,解析成ip地址发送到nginx中

  3.nginx根据剩余的url字符串匹配location / :表示通配

  4.进入location找到proxy_pass

  5.根据proxy_pass后面的值转发

 

 

负载均衡

轮询(RoundRobin) ------ 常用

权重(weight) ----- 常用

ip的hash黏着 ---- 不常用

其他负载均衡 ----- 不常用

轮询(RoundRobin)

平均分配并发访问

实现配置

匹配成功后,对应的域名会被移除

http://www.order.com/index.html

nginx监听端口

nginx监听域名

location匹配 / 成功

 

/index.html

proxy_pass 转发访问

转发虚拟域名orderuser

默认轮询从upstream获取一个server

http://127.0.0.1:8090/index.html

        upstream orderuser{
            server 127.0.0.1:8090;
            server 127.0.0.1:8091;
            server 127.0.0.1:8092;
        }
        
        server {
            listen       80;
            server_name  www.order.com;
            location / {
                 #proxy_pass http://127.0.0.1:8090/;
                 proxy_pass http://orderuser/;
            }
         }
权重(weight)

权:权衡,重:重量(并发占比)

        upstream orderuser{
            server 127.0.0.1:8090 weight=1;
            server 127.0.0.1:8091 weight=5;
            server 127.0.0.1:8092 weight=10;
        }
​
        
        server {
            listen       80;
            server_name  www.order.com;
            location / {
                 #proxy_pass http://127.0.0.1:8090/;
                 proxy_pass http://orderuser/;
            }
         }

 

静态文件访问

  使用:root 

nginx作为http服务器可以处理静态文件,html, js, css, img

 

测试案例

修改之后只能通过nginx访问静态资源

http://image.jt.com/image/Penguins.jpg

    server {
            listen       80;
            server_name  image.jt.com;
            #/image/Penguins.jpg
            location / {
                   root c:\\upload;     
                   #类似proxy_pass,是转发访问资源的关键字,指定的位置不是后端服务器,而是nginx所在服务器的磁盘路径. c:\\upload/image/1.jpg
            }
        }

 

location匹配规则

优先级从上到下,一个server可以配置多个location,根据配置规则优先级关系,寻找一个处理当前请求url的真正逻辑地址

 

精确匹配 =/image:url域名端口后的字符串完全相等

带有修饰的前缀字符串 ~^/image:url域名端口后以image开始的

不带修饰的前缀字符串 /image:url域名端口后以image开始的

正则匹配关系 ~正则表达式:满足正则表达式的url匹配成功

通配 /:匹配所有任意的url地址,优先级最低

 

包含关系的优先级:

有修饰前缀的字符串匹配,有包含关系是,根据最大匹配长度原则,优先级最高

正则包含关系时,配置在上的location优先级越高

测试案例

以下访问地址拿到什么返回值

http://localhost/ 返回 206

http://localhost/image 返回 200

http://localhost/image/te 返回 201

http://localhost/image/test/haha 返回203

http://localhost/haha.png 返回 204

            server{
                listen       80;
                server_name  localhost;
                
                location =/image    {return 200}
                location~^/image   {return 201}
                locatoin /image   {return 202}
                location ~^/image/test{return 203}
                location ~.png$     {return 204}
                location ~.(pgn|jpg|gif)$ {return 205}
                location /          {return 206}
            }

 


 

利用不同的匹配规则,实现动态资源的nginx转发访问

http://www.order.com/user/query/point?userId=1

http://www.order.com/order/pay?orderId=a

server{
        listen       80;
        server_name  www.order.com;
        location / {
            #proxy_pass http://127.0.0.1:8090/;
            #proxy_pass http://orderuser/;
            root easymall;
        }
        
        #无修饰的前缀匹配其他的动态资源访问
        location /user {
            proxy_pass http://orderuser/user;
        }
        
        location /order{
            proxy_pass http://orderuser/order;
        }
​
}

 


 

 

posted @ 2020-08-19 19:55  minnersun  阅读(182)  评论(0编辑  收藏  举报