将整个 URL 路径从 nginx 代理到 haproxy

将整个 URL 路径从 nginx 代理到 haproxy

我在服务器的入口点有 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;
    ...
}

这个文件了解详情。

相关内容