【转】Nginx服务器的反向代理proxy_pass配置方法讲解
【转】Nginx服务器的反向代理proxy_pass配置方法讲解
转自:http://www.jb51.net/article/78746.htm
就普通的反向代理来讲
Nginx的配置还是比较简单的,如:
1 2 3 4 | location ~ /* { proxy_pass http://127.0.0.1:8008; } |
或者可以
1 2 3 4 | location / { proxy_pass http://127.0.0.1:8008; } |
Apache2的反向代理的配置是:
1 | ProxyPass /ysz/ http://localhost:8080/ |
然而,如果要配置一个相对复杂的反向代理
Nginx相对Apache2就要麻烦一些了
比如,将url中以/wap/开头的请求转发到后台对应的某台server上
可以再Nginx里设置一个变量,来临时保存/wap/后面的路径信息
1 2 3 4 5 6 7 8 9 | location ^~ /wap/ { if ($request_uri ~ /wap/(\d+)/(.+)) { set $bucketid $1; set $params $2; } proxy_pass http://mx$bucketid.test.com:6601/$params; } |
也可以首先rewrite一下,然后再代理:
1 2 3 4 | location ^~ /wap/{ rewrite /wap/(\d+)/(.+) /$2?$args break; proxy_pass http://mx$1.test.com:6601; } |
或者
1 2 3 4 | location ~* /wap/(\d+)/(.+) { proxy_pass http://mx$1.test.com:6601/$2?$args; } |
注意上面最后的?$args,表明把原始url最后的get参数也给代理到后台
如果在proxy_pass中使用了变量(不管是主机名变量$1或后面的$2变量),则必须得加这段代码
但如果pass_proxy后没用任何变量,则不需要加,它默认会把所有的url都给代理到后台,如:
1 2 3 4 | location ~* /wap/(\d+)/(.+) { proxy_pass http://mx.test.com:6601; } |
而Apache2相对就简单多了:
1 2 3 4 5 6 | ProxyPassMatch ^/wap/(.*)$ http://192.168.132.147/$1 if ($host ~* www.(.*)){ set $host_without_www $1; rewrite (.*)$ http://$host_without_www/www$1; } |
url的/问题
在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。
下面四种情况分别用http://192.168.1.4/proxy/test.html 进行访问。
第一种:
1 2 3 | location /proxy/ { proxy_pass http://127.0.0.1:81/; } |
会被代理到http://127.0.0.1:81/test.html 这个url
第二咱(相对于第一种,最后少一个 /)
1 2 3 | location /proxy/ { proxy_pass http://127.0.0.1:81; } |
会被代理到http://127.0.0.1:81/proxy/test.html 这个url
第三种:
1 2 3 | location /proxy/ { proxy_pass http://127.0.0.1:81/ftlynx/; } |
会被代理到http://127.0.0.1:81/ftlynx/test.html 这个url。
第四种情况(相对于第三种,最后少一个 / ):
1 2 3 | location /proxy/ { proxy_pass http://127.0.0.1:81/ftlynx; } |
会被代理到http://127.0.0.1:81/ftlynxtest.html 这个url
上面的结果都是本人结合日志文件测试过的。从结果可以看出,应该说分为两种情况才正确。即http://127.0.0.1:81 (上面的第二种) 这种和 http://127.0.0.1:81/.... (上面的第1,3,4种) 这种。
扫描公众号,关注更多信息
---------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------to be a better me, talk is cheap show me the code
版权所有,转载请注明原文链接。
文中有不妥或者错误的地方还望指出,以免误人子弟。如果觉得本文对你有所帮助不妨【推荐】一下!如果你有更好的建议,可以给我留言讨论,共同进步!
再次感谢您耐心的读完本篇文章。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?