nginx 之 proxy_pass详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 之 proxy_pass详解相关的知识,希望对你有一定的参考价值。

参考技术A nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。

第一种:
location /proxy/
proxy_pass http://127.0.0.1/;

代理到URL: http://127.0.0.1/test.html

第二种(相对于第一种,最后少一个 / )
location /proxy/
proxy_pass http://127.0.0.1;

代理到URL: http://127.0.0.1/proxy/test.html

第三种:
location /proxy/
proxy_pass http://127.0.0.1/aaa/ ;

代理到URL: http://127.0.0.1/aaa/test.html

第四种(相对于第三种,最后少一个 / )
location /proxy/
proxy_pass http://127.0.0.1/aaa ;

代理到URL: http://127.0.0.1/aaatest.html

nginx中有两个模块都有 proxy_pass 指令。

在两个模块中,两个 proxy_pass 都是用来做后端代理的指令。
ngx_stream_proxy_module 模块的 proxy_pass 指令只能在server段使用使用, 只需要提供域名或ip地址和端口。可以理解为端口转发,可以是tcp端口,也可以是udp端口。
ngx_http_proxy_module 模块的 proxy_pass 指令需要在location段,location中的if段,limit_except段中使用,处理需要提供域名或ip地址和端口外,还需要提供协议,如"http"或"https",还有一个可选的uri可以配置。

文件: /data/www/test/test.php

通过查看 $_SERVER['REQUEST_URI'] 的值,我们可以看到每次请求的后端的request_uri的值,进行验证。

情形A和情形B进行对比,可以知道 proxy_pass 后带一个URI,可以是斜杠(/)也可以是其他uri,对后端 request_uri 变量的影响。
情形D说明,当location为正则表达式时, proxy_pass 不能包含URI部分。
情形E通过变量($request_uri, 也可以是其他变量),对后端的 request_uri 进行改写。
情形F和情形G通过rewrite配合break标志,对url进行改写,并改写后端的 request_uri 。需要注意, proxy_pass 地址的URI部分在情形G中无效,不管如何设置,都会被忽略。

以上是关于nginx 之 proxy_pass详解的主要内容,如果未能解决你的问题,请参考以下文章

nginx 之 proxy_pass详解

nginx 之 proxy_pass详解

nginx 之 proxy_pass详解

nginx location proxy_pass详解

Nginx proxy_pass详解

nginx中配置proxy_pass详解,末尾带不带斜杠/的区别