Warm tip: This article is reproduced from serverfault.com, please click

load balancing-从Nginx代理到haproxy的整个URL路径

(Proxy entire url path to haproxy from nginx)

发布于 2021-03-19 08:20:58

我在服务器的入口点有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/可以。我怎样才能解决这个问题?

Questioner
amir
Viewed
11
Richard Smith 2019-01-25 19:22:11

proxy_pass语句包括一个可选的URI,用于在将URL传递给上游之前修改URL。

在你的问题中,该proxy_pass语句包括一个URI /,该URIlocation结合使用,从而导致/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;
    ...
}

有关详细信息,请参见此文档