【Nginx】反向代理、动静分离、负载均衡、Rewrite、防盗链


反向代理

    server {
        listen        8081;
        server_name    www.fan.cn;
        location / {
            proxy_pass http://127.0.0.1:5001;
        }    
    }

动静分离

动静分离可通过location对请求url进行匹配,将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。通常将静态资源放到nginx中,动态资源转发到tomcat服务器中。

server {
        listen        8083;
        server_name    *.fan.cn;
        
        # 当url中有/static时,会和root目录路径拼接,也就时html/static目录下找文件
        location /static {
            root     html;
            index    index.html index.htm;
        }
        
        location / {
            proxy_pass http://127.0.0.1:5001;
        }
    }

当访问http://order.fan.cn:8083/static/1.jpg时,会去nginx中的html/staic目录找文件,当访问http://order.fan.cn:8083,去将请求转发到http://127.0.0.1:5001

负载均衡

#定义一组服务器
upstream myServers1
    {
        server 127.0.0.1:5000;
        server 127.0.0.1:5001;
    }
    server {
        listen        8084;
        server_name    *.fan.cn;
        location / {
            proxy_pass http://myServers1;
        }    
    }

以上配置使用轮询模式,5000、5001会交替被访问

其他负载均衡模式

  • 权重模式
upstream myServers1
    {
        server 127.0.0.1:5000 weight=1;
        server 127.0.0.1:5001 weight=3;
    }
  • ip_hash
    根据客户端的ip地址转发同一台服务器,可以保持会话,但是很少用这种方式去保持会话,例如我们当前正在使用wifi访问,当切换成手机信号访问时,会话就不保持了。
  • least_conn
    最少连接访问,优先访问连接最少的那一台服务器,这种方式也很少使用,因为连接少,可能是由于该服务器配置较低,刚开始赋予的权重较低。
  • url_hash(需要第三方插件)
    根据用户访问的url定向转发请求,不同的url转发到不同的服务器进行处理(定向流量转发)。
  • fair(需要第三方插件)
    根据后端服务器响应时间转发请求,这种方式也很少使用,因为容易造成流量倾斜,给某一台服务器压垮。

upstream参数

  • server 反向服务地址加端口
  • weight 权重,默认是1,越大权重就越大
  • max_fails 失败多少次认为主机已挂掉则,踢出 (默认配置10s,即服务器宕掉,会自动剔除)
  • fail_timeout 踢出后重新探测时间
  • backup 备用服务,当其他非backup的机器全部宕机或者繁忙的时候,才会启动这台机器。
  • down 表示当前Server不参与负载
upstream myApiTest {
    server localhost:9001 backup;
    server localhost:9002 down;
    server localhost:9003;
}
  • max_conns 允许最大连接数
  • slow_start 当节点恢复,不立即加入,而是等待 slow_start 后加入服务对列。

Rewrite

掩藏真实的url以及url中可能暴露的参数,以及隐藏web使用的编程语言,提高安全性便于搜索引擎收录

server {
        listen        8085;
        server_name    *.fan.cn;
        location / {
            rewrite ^/product.html$ /product/index break;
            proxy_pass http://127.0.0.1:5001;
        }    
    }

防盗链

   location ^~/images/ {
            valid_referers 192.168.8.102;  #valid_referers 指令,配置是否允许 referer 头部以及允许哪些 referer 访问。192.168.8.102不是ip而是域名(去掉http:// 前缀)
            if ($invalid_referer) {  # 注意这里if后要加空格
                return 403; ## 返回错误码
            }
            
            root   /www/resources;
        } 
 

相关