nginx proxy_pass 配置详解
语法: | proxy_pass URL; |
默认值: | — |
上下文: | location , if in location , limit_except |
设置被代理的服务器的协议和地址,还可以设置可选的URI。
协议是“http
”或者“https
”。
地址既可以使用域名或者IP地址加端口(可选)的形式来定义:
proxy_pass http://localhost:8000/uri/;
或使用UNIX域套接字路径来定义。该路径接在“unix
”字符串后面,两端由冒号所包围,比如:
proxy_pass http://unix:/tmp/backend.socket:/uri/;
如果解析一个域名得到多个地址,所有的地址都会以轮转的方式被使用。当然,也可以使用upstream来定义地址。
请求URI按下面规则传送给后端被代理服务器:
1.如果proxy_pass
使用了URI(下面例子中127.0.0.1地址后面部分,包括只有斜杠的情况),请求路径与loction路径的匹配部分将被替换为proxy_pass中定义的URI:
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
2.如果proxy_pass
没有使用URI,发给被代理服务器的请求路径和客户端发情的请求路径相同,不会被修改。
location /some/path/ {
proxy_pass http://127.0.0.1;
}
特殊情况:
1.location使用正则表达式定义路径。这种情况下,指令不应该带有URI。
2.使用rewrite指令改变了URI,但仍使用相同配置处理请求(break
):
location /name/ {
rewrite /name/([^/]+) /users?name=$1 break;
proxy_pass http://127.0.0.1;
}
这种情况下,指令设置的URI会被忽略,改变后的URI将被发送给后端服务器。
3.后端服务器的地址,端口和URI中都可以使用变量:
proxy_pass http://$host$uri;
分类: nginx