nginx を使用して、ファイアウォールの背後にある可能性のある Web アプリへのリバース プロキシを作成しています。私の最初の概念実証では、次のロケーション ブロックを使用して動作を確認しました。
location / {
proxy_pass https://localhost:2222;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
を使用して、Web アプリでリバース トンネルを開きssh -f -N -T -R2222:localhost:443 user@nginx-ip
ます。これは私が好きなように正確に機能します。nginx-ip
ブラウザにmy と入力すると、Web アプリから https トラフィックが取得されますがnginx-ip
、 などによって難読化されています。
数千のポート (上記の場合の 2222 ではなく) を介して、潜在的に数千のリバース トンネルを許可したいと考えています。nginx を読んで、正規表現を使用して、ポート番号を含む URI を動的に使用し、その特定のポートに proxy_pass することを考えました。
つまり、I'd like https://nginx-ip/2222/
toproxy_pass https://localhost:2222;
と I'd like https://nginx-ip/1111/
to proxy_pass https://localhost:1111;
.
私はかなりの数のバリエーションを試しましたが、私が推論できる限り、これがうまくいくはずだと考えました:
location ~* ^/(\d+) {
proxy_pass https://localhost:$1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
そうではありません。ブラウザに 502 Bad Gateway が表示され、エラー ログに次のように表示されます。
2016/05/31 21:02:36 [エラー] 6188#0: *3584 localhost を解決するためのリゾルバーが定義されていません, クライアント: {my-client-ip}, サーバー: localhost, リクエスト: "GET /2222/ HTTP/1.1 "、ホスト: "{nginx-ip}"
127.0.0.1
代わりに使用するlocalhost
と404が返されます。Webページには次のように書かれています
見つかりません 要求された URL /2222/ がこのサーバーで見つかりませんでした。
私が試みていることはnginx構成で可能ですか?
繰り返しますが、nginx Web サーバーを介して多数 (数千) の固有のリバース トンネルを開始できるようにしたいと考えています。私の最初の考えは、プロキシしたい他のWebアプリに基づいてnginxサーバーの発信ポートを変更し、nginxサーバーへのリクエストをURIのポートによって別のポートに割り当てることでした(正規表現経由で抽出) .