官方文档地址:nginx.org/en/docs/htt…
proxy_pass 语法:
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
- 设置代理服务器的协议和地址,以及应将位置映射到的可选URI
- 协议可以为http或https
- 地址可以是域名或者ip和端口号
proxy_pass http://localhost:8000/uri/;
想测试一下proxy_pass在代理转发的时候,跟所匹配的location的路径参数的问题。
官网将proxy_pass 代理转发的url分为2种:
第一种:路径中包含uri的,最后以/
结尾,那么,当请求传递到服务器的时候,规范化请求URI中与location匹配的部分被proxy_pass指令中指定的URI代替。
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
# 请求 http://example.com/name/test.html 会被代理到 http://127.0.0.1/remote/test.html
第二种:路径中没有uri的,只有域名或IP和端口的,且结尾没有/
,请求的URI将以与原来客户端发送的格式相同的形式传递到服务器, 或者是将规范化的请求URI完整的传递给改变后的URI。
location /some/path/ {
proxy_pass http://127.0.0.1;
}
# 请求http://example/some/path/test.html 会被转发到 http://127.0.0.1/some/path/test.html
但是在有些情况下,并不确定哪一部分请求的uri需要被替换。
- 当location被指定了正则表达式的时候,proxy_pass不能指定uri。
- 在proxy_pass前面使用了rewrite,如下,这种情况下,proxy_pass是无效的。
关于斜杠的问题
使用proxy_pass做代理转发的时候,如果是上述问题的第一种情况,建议location和proxy_pass 后面的值最后都以斜杠/
结尾,统一起来,要不然会出现问题,下面的博客有整理: