文章目录
proxy_pass代理规则
-
proxy_pass代理后面没有URI:直接将location后的uri追加到代理后面
location /aaa { proxy_pass http://127.0.0.1:9200; # 代理到 http://127.0.0.1:9200/aaa } location /aaa/ { proxy_pass http://127.0.0.1:9200; #访问/aaa/ab 代理到 http://127.0.0.1:9200/aaa/ab }
-
proxy_pass代理后面有URI:将请求的URL中移除location的uri部分,剩下的直接追加到代理后面
location /test/v1/ { proxy_pass http://127.0.0.1:9200/abc/; #访问/test/v1/xxx?a=1 移除/test/v1/部分则代理到http://127.0.0.1:9200/abc/xxx?a=1 } location /aaa/_search { proxy_pass http://127.0.0.1:9200/; # 访问/aaa/_search 代理到http://127.0.0.1:9200/ } location /users/info { proxy_pass http://127.0.0.1:9200/users/infos; #访问/users/infos 移除/users/info部分,代理到/users/infoss #访问/users/info/abc 移除/users/info部分,代理到/users/infos/abc }
注意:以下几种情况无法确定URI中要替换的部分
-
location中带有正则表达式
-
location块中使用了rewrite指令:location中的uri将完全被rewrite替换
location /name/ { rewrite /name/([^/]+) /users?name=$1 break; proxy_pass http://127.0.0.1; } # 访问/name/tom 代理到 http://127.0.0.1/users?name=tom
-
proxy_pass中存在变量
location /name/ { proxy_pass http://127.0.0.1$request_uri; } # 访问/name/tom 代理到 http://127.0.0.1/name/tom
使用proxy_pass最好设置长连接:
upstream mybackup {
server 127.0.0.1:8000;
keepalive 10; # 保持空闲连接数量
}
location /a/ {
proxy_http_version 1.1;
# 防止客户端显示设置连接状态为'Close'
proxy_set_header Connection "";
proxy_pass http://mybackup/;
# 不使用upstream服务而直接写ip地址会导致每次请求完成就断开连接
# 你可以使用tcpdump试着抓包,每次请求都会重新三次握手和四次挥手(也可能是三次挥手)。
# proxy_pass http://127.0.0.1:8000;
}