问题提出场景

1、nginx做反向代理,静态资源过大或者响应多,如果存在被代理机器,影响效率;

2、某URL为了达到安全性等目的,需要代理机代理到特定的被代理机处理;

解决方案:nginx反向代理配置;

假设环境:

代理机ip为ip0,被代理机ip为ip1;

目录

1、分发至特定被代理机配置

2、分发至本地路径配置

3、特定的url分发至特定的被代理机配置

4、某文件夹分发至被代理机配置[1]

5、某文件夹下某后缀文件发送至被代理机配置[1]

扩展功能

6.1 "$"的意义[2]

6.2  rewrite重写

6.3 nginx正则表达式书写


1、分发至特定被代理机配置

其中如果“jpg”等文件也想配置就将“mp4”改成“mp4|jpg|xxx”;

location ~* .(mp4)$ {
        
        proxy_connect_timeout 60;
        proxy_read_timeout    60;
        proxy_send_timeout    60;        
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://ip1; #这个是重点,其它参数随你自己的需求添加

         if (-f $request_filename) {
           expires max;
           break;
       }
    }

示例:如果客户访问ip为"ip0/test/test.mp4",那么代理机就会直接访问"ip1/test/test.mp4"

2、分发至本地路径配置

location ~* .(mp4)$ {
          root /html; #本地特定的路径
          if (-f $request_filename) {
           expires max;
           break;
        }
    }

示例: 如果客户访问ip为"ip0/test/test.mp4",那么代理机就会直接访问本地html目录,并以"html"文件夹为根目录;

3、特定的url分发至特定的被代理机配置

location ~* xxx.php$ {
        proxy_connect_timeout 60;
        proxy_read_timeout    60;
        proxy_send_timeout    60;        
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://ip1;
    }

示例: 如果客户访问ip为"ip0/test/xxx.php",那么代理机就会直接访问"ip1/test/xxx.php";

4、某文件夹分发至被代理机配置[1]

location ^~ /static_js/ { 

        proxy_connect_timeout 60;
        proxy_read_timeout    60;
        proxy_send_timeout    60;        
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        proxy_pass http://ip1/; 

}

如果请求的url是http://ip0/static_js/test.html,会被代理成http://ip1/test.html;特别注意的是,如果ip后面不加"/",那么会代理成http://ip1/static_js/test.htm

5、某文件夹下某后缀文件发送至被代理机配置[1]

location ~^/project/.*.action$ {  

    rewrite ^/project/(.*).action /$1.action break; 
    proxy_pass  http://ip1;  

}  

把http://ip0/project/test.action 反向代理到 http://ip1/test.action。

基本上的功能有这5个场景,然后自己去挖掘就可以了;

扩展功能

里面涉及了另外几个有意思的知识点,学了能让你配置反向代理更游刃有余:

6.1 "$"的意义[2]

Nginx中,set $para $1,$1表示路径中正则表达式匹配的第一个参数。

以下是一个示例,用以实验$1,$2。如:

location ~/abc/(.*)/(.*) {
 
    set $para1 $1
 
    set $para2 $2
 
    content_by_lua_block {
 
    ngx.say(ngx.var.para1)
 
    ngx.say(ngx.var.para2)
 
    }
 
}

此时,若访问路径为localhost:8080/abc/qwe/asd时,则浏览器会输出"qwe"与"asd";

6.2  rewrite重写

别人总结得不错,就贴上其他人博客了:Nginx之八 URL重写(rewrite)配置_Visonws的博客-CSDN博客_nginx rewrite url重写

6.3 nginx正则表达式书写

nginx入门必备收藏:nginx 正则表达式匹配详解_公众号:码农富哥的博客-CSDN博客_nginx 正则表达式

参考资料:

[1] nginx 反向代理 某个目录下 带特定后缀名的文件_xtqve的博客-CSDN博客_指定反向代理名称或代理文件夹已存在

[2] nginx中 $1,$2,$3是什么?_cbmljs的博客-CSDN博客_nginx中$1

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐