web-dev-qa-db-ja.com

nginxからhaproxyへのURLパス全体をプロキシする

サーバーへのエントリポイントにnginxがあります。 SSL接続を処理し、/api/v1/HTTPリクエストを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/パスを2回渡す必要があることです。 https://servername.com/api/v1/をリクエストすると、haproxyはこれを適切に処理しませんが、:https://servername.com/api/v1/api/v1/の場合は問題ありません。どうすればこれを修正できますか?

2
amir

proxy_passステートメントには、上流に渡す前にURLを変更するために使用されるオプションのURIが含まれています。

あなたの質問では、proxy_passステートメントに/のURIが含まれています。これは、location値と組み合わせて、元のURLの/api/v1/部分を置き換えます。 /

例:https://example.com/api/v1/foohttp://127.0.0.1:8585/fooに変換されます。

これは必要ないようです。この機能をオフにするには、URI部分を削除するだけです。

例えば:

location /api/v1/ {
    proxy_pass http://127.0.0.1:8585;
    ...
}

詳細は このドキュメント を参照してください。

2
Richard Smith