Nginx反向代理特定路径及url(以mp4文件及xxx.php为例)
问题提出场景:1、nginx做反向代理,静态资源过大或者响应多,如果存在被代理机器,影响效率;2、某URL为了达到安全性等目的,需要代理机代理到特定的被代理机处理;解决方案:nginx反向代理配置;假设环境:代理机ip为ip0,被代理机ip为ip1;1、分发至特定被代理机配置其中如果“jpg”等文件也想配置就将“mp4”改成“mp4|jpg|xxx”;location ~* .(mp4)$ {pr
问题提出场景:
1、nginx做反向代理,静态资源过大或者响应多,如果存在被代理机器,影响效率;
2、某URL为了达到安全性等目的,需要代理机代理到特定的被代理机处理;
解决方案:nginx反向代理配置;
假设环境:
代理机ip为ip0,被代理机ip为ip1;
目录
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博客_指定反向代理名称或代理文件夹已存在
更多推荐
所有评论(0)