![将整个 URL 路径从 nginx 代理到 haproxy](https://linux22.com/image/732700/%E5%B0%86%E6%95%B4%E4%B8%AA%20URL%20%E8%B7%AF%E5%BE%84%E4%BB%8E%20nginx%20%E4%BB%A3%E7%90%86%E5%88%B0%20haproxy.png)
我在服务器的入口点有 nginx。它处理 SSL 连接并将HTTP
请求发送/api/v1/
到 HAproxy 进行平衡。这是我的 nginx 配置:
location /api/v1/ {
proxy_pass http://127.0.0.1:8585/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
和 HAproxy 配置:
frontend haproxy_entry
bind *:8585
mode http
log global
acl is_api url_beg /api/v1/
use_backend api if is_api
我遇到的问题是我应该传递/api/v1/
路径两次。如果我请求https://servername.com/api/v1/
haproxy 将无法正确处理这个问题,但是对于:https://servername.com/api/v1/api/v1/
没问题。我该如何解决这个问题?
答案1
该proxy_pass
语句包括一个可选的 URI,用于在将 URL 传递到上游之前对其进行修改。
在您的问题中,proxy_pass
语句包含 的URI /
,它与 的值结合location
,导致/api/v1/
原始URL的一部分被 替换/
。
例如:https://example.com/api/v1/foo
翻译为http://127.0.0.1:8585/foo
。
看来您不需要这个。要关闭该功能,只需删除 URI 部分即可。
例如:
location /api/v1/ {
proxy_pass http://127.0.0.1:8585;
...
}
看这个文件了解详情。