2.Nginx配置实例

1.配置反向代理

解释:当浏览器输入:http://wmd02/getPerson/10007可以访问到真正的服务端
     1.在客户端的host文件中配置域名解析:即当浏览器输入wmd02时,会访问到192.168.2.129服务器
         192.168.2.129 wmd02
     2.配置nginx服务器:上述未设置端口,即会访问到192.168.2.129服务器的80端口,即nginx服务
         /usr/local/nginx/conf/nginx.conf配置:
             server {
                listen       80;
                server_name  192.168.2.129;
                location / {
                    root   html;
                    #配置下述:即访问时,映射到该服务上
                    proxy_pass http://192.168.2.2:8001;
                    index  index.html index.htm;
                }
            }
    3.nginx配置文件重载:
        ./configure -s reload
    4.页面访问:http://wmd02/getPerson/10007   也访问到了真实的服务上:
        nginx访问:http://wmd02/getPerson/10007
        真实访问: http://192.168.2.2:8001/getPerson/10007
        发现nginx隐藏了真实的服务器ip和端口!起到了保护服务器的目的!

场景2:当客户端访问路径不同,调用不同的服务提供端

1.启动两个服务提供端提供服务
2.当客户端访问路径包含:
    person1访问1号服务提供端
    person2访问2号服务提供端

3.nginx的配置文件nginx.cof配置:可以配置多个server(即监听)如下:
    监听端1:监听该服务器的80端口,然后再进行反向代理
     server {
        listen       80;
        server_name  192.168.2.129;
        location / {
            root   html;
            proxy_pass http://192.168.2.2:8001;
            index  index.html index.htm;
        }
    }
    监听端2:监听该服务器的9001端口,然后进行反向代理,一个server中可以配多个location,即按照路径的不同可以访问到不同的服务器上
    server  {
        listen  9001;
        server_name 192.168.2.129;
        location ~ /person1/ {--->当路径里包含person1会访问1服务器,/person1路径也会加上变为:http://192.168.2.2:8001/person1/getPerson/10007
                proxy_pass http://192.168.2.2:8001;
        }
        location ~ /person2/ {--->当路径里包含person2会访问2服务器
                proxy_pass http://192.168.2.2:8002;
        }

   }
    示例:如果访问:http://wmd02:9001/person1/getPerson/10007
    会经反向代理访问到:http://192.168.2.2:8001/person1/getPerson/10007

4.location的指令说明:
    该指令用于匹配URL
    语法如下:
        location [ = | ~ | ~* | ^~ ] uri {
            
        }
    1.=:用于不含正则表达式的uri前,要求请求字符串和uri严格匹配,如果匹配成功,就停止继续向下搜索并处理该请求
    2.~:用于表示uri包含正则表达式,并且区分大小写
    3.~*:用于表示uri包含正则表达式,但是不区分大小写
    4.^~:用于不包含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location进行处理,
          而不再使用location块中的正则uri和请求字符串做匹配
    5./ 通用匹配,任何请求都会匹配到。
    6.!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
  注意:如果uri包含正则表达式,则必须要有~或者~*标识

Nginx负载均衡

场景:例如并发请求将压力均摊到服务
nginx的配置:
      #1.在http块配置服务提供端的集群地址  
       upstream myserver{
                server  192.168.2.2:8001;
                server  192.168.2.2:8002;
       }
        server {
            listen       80;
            server_name  192.168.2.129;
            #2.在server块,使用集群名称
            location / {
                root   html;
                proxy_pass http://myserver;
                index  index.html index.htm;
            }
        }
此时访问:http://wmd02/getPerson/10007
页面输出:服务提供端口不一致了,即不同服务轮训的提供服务
    {"status":200,"message":"查询成功!id:10007 serverPort:8001","result":{"id":10007,"name":"吴孟达","age":18,"message":"吴孟达留言"}}
    {"status":200,"message":"查询成功!id:10007 serverPort:8002","result":{"id":10007,"name":"吴孟达","age":18,"message":"吴孟达留言"}}

nginx的负载策略:
    1.轮询(默认)
        每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
    2.weight(权重)
        weight代表权,默认是1,权重越高被分配的客户端越多
        指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
        例如:
            upstream myserver{
                server  192.168.2.2:8001 weight=5;
                server  192.168.2.2:8002 weight=10;
           }
   3.ip_hash
       每个请求按照访问ip的hash结果分配,这样每个方可固定的访问一个后端服务器,可以解决session问题,例如
           upstream myserver{
                ip_hash;
                server  192.168.2.2:8001;
                server  192.168.2.2:8002;
           }
   4.fair(第三方)
       按照后端服务器的响应时间来分配,响应时间短的优先分配
           upstream myserver{
                fair;
                server  192.168.2.2:8001 weight=5;
                server  192.168.2.2:8002 weight=10;
           }

Nginx配置实例---动静分离

简介:
    Nginx动静分离简单的说就是把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离
    严格意义上说,应该是动态请求和静态请求分开,可以理解成使用nginx处理静态页面,tomcat处理动态页面。
    分成两种:
        1.纯粹的把静态文件独立成单独的域名,放在独立的服务器上,
        2.动态和静态混在一起,通过nginx分开
    通过loacation指定不同的后缀名实现不同的请求转发,通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量
    具体Exprise定义:给一个资源设置过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量
    此方法适合不经常变动的资源(如果经常变动的资源不建议Expires来缓存),如果设置3d,表示在3天之内访问这个URL,发送一个请求,对比服务器改文件
    最后的更新时间没有变化,则不会从服务器上抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200

配置可以访问到服务器上的静态资源,如服务器上的文本,相片等
示例:
       server{
        listen 9002;
        location /{
                root  /usr/local/nginx/conf;
                #index nginx.conf;
                autoindex on;文件按照列表展示
        }
   }
当访问:http://wmd02:9002/时,会展示服务器/usr/local/nginx/conf路径下的文件列表

posted @ 2022-05-26 19:51  努力的达子  阅读(392)  评论(0编辑  收藏  举报