Nginx proxy_pass路径匹配与转发规则
1. proxy_pass基础介绍
proxy_pass
指令属于Nginx的ngx_http_proxy_module
模块,用于配置反向代理,将客户端对本地服务器的请求透明地转发至指定的远程服务器。其基本语法如下:
proxy_pass <scheme>://<proxy_host>:<proxy_port>/<path>;
<scheme>
:代理协议(http)<proxy_host>
:代理服务器地址(ip)<proxy_port>
:端口<path>
:可选的附加路径
2. proxy_pass路径匹配与转发规则
2.1 无附加路径
当proxy_pass
指令后仅包含地址和端口,无附加路径时,Nginx将原样转发原始访问URL的完整路径。例如:
location / {
proxy_pass http://backend-server:8080;
}
此时,用户访问http://nginx-server/path/to/resource
时,请求将被转发至:
http://backend-server:8080/path/to/resource
2.2 存在附加路径
若proxy_pass
指令后包含附加路径(以/结尾),Nginx将首先根据当前匹配的location规则识别出请求URL中的匹配部分,然后剔除该部分,将剩余路径附加到proxy_pass指定的路径之后。例如:
location /v1/ {
proxy_pass http://backend-server:8080/api/;
}
当用户访问http://nginx-server/v1/data时,Nginx会将请求转发至:
http://backend-server:8080/api/data
在此过程中,Nginx识别出/v1/
为与location
匹配的部分,并将其剔除,将剩余的/data
附加到http://backend-server:8080/api/
之后
3.总结
请求URL | location匹配规则 | 转发地址 |
---|---|---|
http://nginx-server/path/to/resource | location / { proxy_pass http://backend-server:8080; } | http://backend-server:8080/path/to/resource |
http://nginx-server/v1/data | location /v1/ { proxy_pass http://backend-server:8080/api/; } | http://backend-server:8080/api/data |
参考链接: