ポートを変更するための Nginx リバース プロキシ ベース URI

ポートを変更するための Nginx リバース プロキシ ベース URI

こんにちは、私はリバースプロキシをNginxベースポートとして使用したいのですが、

http://example.com:443/ips/8443 -> http://example.com:8443/ips/8443
http://example.com:443/ips/23950 -> http://example.com:23950/ips/23950

これをサポートするとさらに良いですが、必須ではありません

http://example.com:443/ips/23950/xyz -> http://example.com:23950/ips/23950/xyz

これが私の設定です

    location ~ /ips/([0-9]+)(/|)(\S+|)$ {
            proxy_pass http://127.0.0.1:$1/$3;
    }

私はnginxの正規表現を正しく理解していませんが、最善を尽くしたと言えます

答え1

この問題を解決するには、proxy_pass ディレクティブを更新して、プロキシされたリクエストに完全な URL パスを含める必要があります。これは、受信リクエストの完全な URL パスを含む $request_uri 変数を使用して実行できます。

更新された proxy_pass ディレクティブの例を次に示します。

proxy_pass http://127.0.0.1:$1$request_uri;

これにより、リクエストはローカルポートに渡され、受信リクエストの完全なURLパスも渡されます。したがって、/ips/23950/xyzへのリクエストは、http://127.0.0.1:23950/xyzこれにより、リクエストがローカル サーバーによって正しく処理されるようになります。

また、location /ips ブロック内のブロックは proxy_pass ディレクティブを含む location ブロックのみにする必要があることにも注意してください。これは、location ブロックが順番に処理され、外側の location ブロック内の return 404 ステートメントによって、内側の location ブロックに一致するリクエストが処理されなくなるためです。そのため、ポート番号を含む URL に一致する location ブロック内の return 404 ステートメントを移動し、要求された URL が許可されていないことを示す 403 またはその他のエラー コードを返すように変更する必要があります。

更新された構成の例を次に示します。

location ~ ^/ips/([0-9]+) {
    proxy_redirect off;
    proxy_pass http://127.0.0.1:$1$request_uri;
    proxy_http_version 1.1;
   

関連情報