该笔记将记录:与 proxy_pass 有关的常见问题,以及使用配置
需求:通过不同的 URI 进行反向代理
Module ngx_http_proxy_module / proxy_pass
How to remove the path with an nginx proxy_pass - Server Fault
How can query string parameters be forwarded through a proxy_pass with nginx? - Stack Overflow
问题描述
1)访问 http://example.com/a/foo/auth 地址,则反向代理到 http://127.0.0.1:8443/foo/auth 地址
1)访问 http://example.com/b/foo/auth 地址,则反向代理到 http://127.0.0.1:8993/foo/auth 地址
解决方法
server {
listen 80;
server_name example.com;
location /a/ {
# 注意,一定要使用 http://127.0.0.1:8443/ 而不是 http://127.0.0.1:8443,否则 传递的 URL 将携带 /a/ 前缀
# 参考文档对 proxy_pass 的描述(是否携带 URI 的区别)
proxy_pass http://127.0.0.1:8443/;
# 传递请求头(默认)
proxy_pass_request_headers on;
# 传递请求提(默认)
proxy_pass_request_body on;
}
location /b/ {
proxy_pass http://127.0.0.1:8993/;
}
location / {
return 404;
}
}
当然,还有其他配置方法,比如 rewrite 或 正则表达式匹配 location 等等。
注意事项,如果在 location 中使用正则表达式匹配的方式,需要自行处理 GET 参数问题。如下配置:
server {
...
location ~ ^/a/(.*)$ {
proxy_pass http://127.0.0.1:7011/$1$is_args$args;
}
...
}
参考文献
本文详细讲解了如何在Nginx中通过proxy_pass实现根据URI路径区分的反向代理,包括如何处理不同路径的请求到不同服务器,并提供了配置示例和注意事项,适用于多环境配置管理。
1349

被折叠的 条评论
为什么被折叠?



