Nginx

代理從 nginx 到 haproxy 的整個 url 路徑

  • January 25, 2019

我在伺服器的入口點有 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/沒關係。我怎樣才能解決這個問題?

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;
   ...
}

有關詳細資訊,請參閱此文件

引用自:https://serverfault.com/questions/950737