
こんにちは、私はリバースプロキシを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;