タグ付けされた質問 「reverse-proxy」

リバースプロキシは、クライアント用に定義された特定のサーバーセットからリソースをフェッチするプロキシサーバーの一種です。これは、セキュリティ上の理由から、または利用可能なパブリックIPアドレスの不足のために、コンテンツを含むWebサーバーを直接公開しないことが有利な場合に使用されます。

3
mod_rewriteをURLに使用する方法と同様に、プロキシを介して渡されるすべてのページのコンテンツを置き換えることは可能ですか?
mod_rewriteをURLに使用する方法と同様に、プロキシを介して渡されるすべてのページのコンテンツを置き換えることは可能ですか?代替のドキュメントは明確ではありません。 絶対パスを持つリバースプロキシしているページがいくつかあります。これはサイトを破壊します。それらは置き換える必要があり、mod_rewriteのようなツールはURLリクエストではないため、それらをピックアップしません。 <VirtualHost *:80> ServerName servername1 ServerAlias servername2 ErrorLog "/var/log/proxy/jpuat_prox_error_log" CustomLog "/var/log/proxy/jpuat_prox_access_log" common RewriteEngine on LogLevel alert rewrite:trace2 RewriteCond %{HTTP_HOST} /uat.site.co.jp$ [NC] RewriteRule ^(.*)$ http://jp.uat.site2uk.co.uk/$1 [P] AddOutputFilterByType SUBSTITUTE text/html Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|i" ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://uat.site.co.jp/ ProxyPassReverse / http://uat.site.co.jp/ </VirtualHost> 上記のいずれも、HTML文字列の置換では機能しません。 <link …

5
上流サーバーのタイムアウトでnginxがPUTまたはPOSTリクエストを再試行するのを停止するにはどうすればよいですか?
nginxを使用して、アプリケーションへの要求を負荷分散します。要求がタイムアウトすると、nginxは別のアップストリームサーバーに切り替えることがわかりました(良好)。ただし、これは、望ましくない結果(データが2回保存される)を引き起こす可能性のあるPUTおよびPOST要求に対して行います。タイムアウト時にGETリクエストのみを再試行するようにnginxを設定することは可能ですか?または、問題を解決する別の方法はありますか? 構成は次のとおりです。 upstream mash { ip_hash; server 127.0.0.1:8081; server 192.168.0.11:8081; } server { ... location / { proxy_pass http://mash/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

1
mod_proxyにエンコードされたスラッシュ(/)文字を正しく転送させることができません(%2f)
リダイレクトするように仮想ホストを設定していますntung-gitblit.localhost-> myserver:1279。ただし、フォワードエンコードされたスラッシュ(%2f)では機能しません。私がアクセスしようとしているURLは、 http://ntung-gitblit.localhost/ABC%2fXYZ がなければAllowEncodedSlashes、失敗します-Apache /error/HTTP_NOT_FOUND.html.varはサーバーにアクセスしようとします。に設定AllowEncodedSlashesするOnと、次の内部URLヒットが発生します。 http://myserver:1279/ABC/XYZ に設定AllowEncodedSlashesするNoDecodeと、次のURLがヒットします。 http://myserver:1279/ABC%252fXYZ 言い換えれば、それは過剰なエスケープまたは過小なエスケープです。質問:どうやってヒットさせるのmyserver:1279/ABC%2fXYZですか?

3
NginxはHAProxyの前にあるべきですか、それとも反対ですか?
私は、ウェブサイトのインフラストラクチャーアーキテクチャー設計の経験がほとんどありません。私はそれが特定の状況であるかもしれないことを知っています。Webサイトは次のことになっています。 1)一部のページ(ログインページなど)に対してHTTPSサポートが必要で、他のページは単にHTTPページです。 2)複数のWebサーバーが必要であるため、負荷分散が必要です。 3)パフォーマンスを向上させるには、HTTPキャッシングと圧縮が必要です。 4)一部のリクエスト(画像のアップロードなど)は、専用のバックエンドサーバーにルーティングする必要があります。そのため、URLベースのバランスが必要です。 NginXとHAProxyは、どちらもオープンソースのリバースプロキシやロードバランサーとして優れていることを知っています。HAProxyはSSLをサポートしていないため、Nginxの負荷分散はHAProxyほど優れていません。私は両方を取ります。 Nginx(リバースプロキシとして)をHAProxyの前に(ロードバランサーとして)または反対に配置する必要がありますか? ありがとう

2
末尾のスラッシュの有無にかかわらずプロキシをリバースする方法
サイトをリバースプロキシする必要があるApache Webサーバーがあります。だから、example.com/test/またはexample.com/test同じ他のWebサーバからのプル。次のように、スラッシュなしのリバースプロキシをセットアップしました。 ProxyPass /test http://othersite.com/test ProxyPassReverse /test http://othersite.com/test ただし、末尾のスラッシュでは機能しません。 何か案は?から/test/にリダイレクトしようとしました/testが、運がありません。 ありがとう。

2
nginxがリバースプロキシとして構成されている場合、ホストヘッダーをApacheのProxyPreserveHostのようなダウンストリームサーバーに書き換えることはできますか?
ApacheのProxyPreserveHost http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehostオプションに相当するものがnginx で見つからないようです。これは、仮想ホストへのリバースプロキシに必要です。 ブラウザーが提供するホスト名をダウンストリームサーバーのホスト名に置き換えます。 存在しますか?

4
Cookieを使用してNginxプロキシターゲットを制御していますか?
興味深いApache mod_rewrite設定を使用してリバースプロキシを変換して、代わりにNginxを使用しようとしています(外部の懸念により、ApacheからNginxに移行しているため、この部分を除いてほとんどすべてが正常に機能します)。 私の最初の設定は、HTTP Cookie(アプリケーションによって設定された)を読み取り、その値に応じて、リバースプロキシを異なるバックエンドに転送することでした。それはこのようなものでした: RewriteCond %{HTTP_COOKIE} proxy-target-A RewriteRule ^/original-request/ http://backend-a/some-application [P,QSA] RewriteCond %{HTTP_COOKIE} proxy-target-B RewriteRule ^/original-request http://backend-b/another-application [P,QSA] RewriteRule ^/original-request http://primary-backend/original-application [P,QSA] 私はNginxを使用して同じことを達成しようとしています、そして私の初期設定はこのようなものでした( "proxy_override"はCookieの名前です): location /original-request { if ($cookie_proxy_override = "proxy-target-A") { rewrite . http://backend-a/some-application; break; } if ($cookie_proxy_override = "proxy-target-B") { rewrite . http://backend-b/another-application; break; } proxy_pass http://primary-backend/original-application; } …

2
nginx proxy_pass応答ヘッダーの場所の書き換え
このnginxインスタンスの目的は、GitLabとOpenWRT Luciにリバースプロキシを介してリダイレクトさせることです。それはすでに他のいくつかのウェブサイトで機能しており、すべてがこの問題に対抗するように見えるベースURLを持っています。 この例のGitLabは、ローカルサーバーのポート9000にあります。 nginxウェブサイトはポート8080にあります。 OpenWRTにもまったく同じ問題がありますが、/ cgi-bin / luci / サンプルの場所に関連するnginx設定は次のとおりです。 location /gitlab/ { proxy_pass http://127.0.0.1:9000/; proxy_redirect default; } 結果は末尾のスラッシュを付けても付けなくても同じです。 この場所に適用されているいくつかのヘッダープロキシ構成オプションがあります。 # Timeout if the real server is dead proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; # Basic Proxy Config proxy_set_header Host $host:$server_port; proxy_set_header Origin $scheme://$host:$server_port; proxy_set_header Connection $http_connection; proxy_set_header Cookie …

1
nginxが特定のサブディレクトリをリバースプロキシしないようにする方法
Apacheでは、1つ以上のサブディレクトリ(「!」付き)を除くすべてをProxyPassできます。 ProxyPass /subdir ! ProxyPass / http://localhost:9999/ Nginxに相当するものは何ですか? 私の最初の推測は明らかに機能していません: location /subdir { root /var/www/site/subdir; } location / { proxy_pass http://localhost:9999/ ; }

1
サブフォルダーを使用するnginx proxy_pass
わかりました。このタスクは単純なはずですが、機能させることができません。ドメイン名の後に(実際にはそのドメイン名のIPの後に)サブフォルダーを配置すると、同じサーバー上の特定のポートにリダイレクトされます。基本的に、私は多くのポートを使用する必要をなくしたいと思います。 これがそのための私のnginx設定です server { listen 80; index index.html index.htm index.nginx-debian.html index.php; server_name aaa.bbb.ccc.ddd; location ^~ /app2 { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://aaa.bbb.ccc.ddd:8001; } } したがって、aaa.bbb.ccc.ddd / app2にアクセスすると、http://aaa.bbb.ccc.ddd:8001に解決されます。 これはおそらく非常に複雑であることに注意してください。ここで何が欠けていますか? パットありがとう

1
プロトコルfooをホスト名対応にするにはどうすればよいですか?
これは、ホスト名認識とプロキシについての標準的な質問です。 一部のプロトコルはホスト名に対応しています。つまり、HTTPサーバーに接続すると、同じIPアドレス上にあっても、ではなくのHTTPサービスがwww.example.com必要であることがわかります。プロトコルfooに対してこれを行うにはどうすればよいですか?www.example.comwww.example.net (一時的なメモ:この質問は、このメタディスカッションに従って表示されます。)

2
ホスト名でssh接続をdockerコンテナーに転送する
私は非常に特殊な状況に陥っています。これを行う方法は他にもありますが、これに夢中になり、次のように正確に行う方法を見つけたいと思います。 バックグラウンド サーバーがいくつかのサービスを実行していて、分離されたDockerコンテナーに隠れているとします。これらのサービスのほとんどはhttpであるため、nginxプロキシを使用して各サービスに特定のサブドメインを公開しています。たとえば、ノードサーバーは、ポートがホスト上に80バインドさ127.0.0.1:8000れたDockerコンテナーで実行されています。私はそのプロキシすべての要求にnginxのでバーチャルホストを作成しますmyapp.mydomain.comしますhttp://127.0.0.1:8000。このようにして、を介して以外から外部からDockerコンテナーにアクセスすることはできませんmyapp.mydomain.com。 ここで、gogsコンテナーを指すような方法でgogs Dockerコンテナーを開始したいと思いgogs.mydomain.comます。ホストでバインドされたポートでこのgogsコンテナを開始します。そして、要求にプロキシnginxのサイトに、それがうまく機能し...8000127.0.0.1:8001gogs.mydomain.comhttp://127.0.0.1:8001 しかし、gogsはgitコンテナーなので、経由でリポジトリにアクセスしたいのgit@gogs.mydomain.com:org/repoですが、現在の設定では機能しません。その作業を行う1つの方法22は、コンテナーのポート0.0.0.0:8022をホストのポートにバインドすることですgit@gogs.mydomain.com:8022/repo。その場合、git ssh urlは次のようになります。 (それはうまくいかないようです。そのようなuriでオリジンにプッシュすると、git gitはgogs.mydomain.com-ではなく-のユーザーのパスワードを要求しますgogs.mydomain.com:8022が、それはおそらく私が間違っていることであり、この質問の範囲外です私もその診断をお願いします) 問題 私の主な懸念は、<gogs container>:22nginxを使用してhttpポートをプロキシするのと同じように、sshポートをプロキシ化することです。つまりgogs.mydomain.com、コンテナのポートに渡されるssh接続22。すでにホストでsshdが実行されているため、コンテナーのsshポートをホストのsshポートにバインドできません。また、これは、接続*.mydomain.comがコンテナのsshdに渡されることを意味します。 にssh接続したい: mydomain.com host.mydomain.com または受け入れられ、ホスト上のsshdに転送されるmydomainのIPアドレス gogs.mydomain.comまたはgit.mydomain.comgogsコンテナのsshdに渡されたものを受け入れる *.mydomain.com(*上記の可能性以外のものはどこですか)拒否されます httpの場合、nginxを使用して簡単に機能させることができます。SSHでそれを行う方法はありますか? (また、外に出て尋ねたいと思います:一般的にTCPサービスでそれを達成する方法はありますか?) ここで私がやろうとしている方法についての洞察も歓迎します。私がやろうとしていることがまったくばかげていると言われてもかまわない。 私がすでに頭に浮かんだこと: たぶん私はホスト上のsshdソケットをコンテナとしてroボリュームとして共有できますか?これは、コンテナ内のsshdがへのすべての接続を取得できることを意味し*.mydomain.comます。または以外のすべての接続をコンテナ内のsshdに拒否させる方法はありますgogs.mydomain.comかgit.mydomain.com?ただし、ホスト上のsshdは、*.mydomain.comとにかくすべての接続を取得しgogs.mydomain.comます。ですから対立が起こります わからないけど、実際に試したことはありません。必要があります私はそれを試してみてください?

6
中間サーバーを介したリモートデスクトップ用のSSHトンネルパートII
リモートデスクトップを介してリモートデスクトップを実行するために、中間サーバーを使用して2つのSSHトンネルを構成する方法を以前に質問し、それを機能させることができました。今、私は同じマシンを使用して同じことをしようとしていますが、逆の順序です。ここに設定があります: ファイアウォールの背後にあるプライベートネットワーク内のWindows 7 PC。 PCにアクセスできるパブリックアクセスLinuxサーバー。 PCからリモートデスクトップを実行したい自宅のWindows 7ラップトップ。 ラップトップでPuttyを使用して、それからLinuxサーバーへの逆トンネルを作成しますR60666 localhost:3389。 PCでPuttyを使用して、PCからLinuxサーバーへの通常のトンネルを作成しますL60666 localhost:60666。 LinuxサーバーにSSHで接続し、telnet localhost 60666を実行すると、ここで受け取ったデバッグのヒントで説明されているように、予期した出力が生成されるようです。 リモートデスクトップをPCからラップトップに接続してみますlocalhost:60666。ユーザー名とパスワードの入力を求められ、[OK]をクリックすると、ラップトップの現在のセッションがロックされ(デスクトップではなくラップトップのウェルカム画面が表示されます)、リモートデスクトップ画面に「ようこそ」メッセージが表示されます。真っ黒になるだけです。切断されず、エラーも発生せず、リモートデスクトップ画面でアクションを実行できません。Windows XPラップトップで同じ設定を試しましたが、同じ現象が発生しています。60666以外のポートも使用しようとしましたが、何も変わりませんでした。誰かが私が間違っていることを知っていますか? 更新:@jwindersで指摘されているようにtelnet PC 3389、Linuxサーバーから直接実行することはできません。Windowsファイアウォールには、ポート3389でのすべての接続を許可するルールがあるため、何がそれをブロックしているのかわかりません。幸い、LinuxマシンからPCへのSSHトンネルを作成できますssh 3389:localhost:3389 'domain\user'@PC。

3
リソースの読み込みに失敗しました:net :: ERR_CONNECTION_RESET
リバースプロキシ(Apache2のmod_jk)の背後にあるアプリケーションの使用を開始してから、一部のページが読み込まれないことに気付きました(リバースプロキシ設定がない場合)。 それは、Google Chromeのおかげで見つけるために検査しなければならない微妙なエラーでした:リソースのロードに失敗しました:net :: ERR_CONNECTION_RESET。 単純に、JavaScriptファイルは部分的にロードされます(〜50KBから〜12KBがロードされます)。 Apache2、mod_jk、AJP、またはJettyに問題があると思いました。 しかし、その後、私は調査を行って、さまざまなブラウザーをさまざまなネットワークで使用することを検討しました。 判定: このエラー(ERR_CONNECTION_RESET)は、静的 IPのネットワークを使用している場合にのみ発生します。 1台のルーターでセキュリティレベルを下げましたが、無駄でした。 静的IPを備えたネットワークは、より高いレベルのセキュリティを備えていますか? この問題を克服する方法は? リバースプロキシは主に、セキュリティレベルを高めるためにセールスポイントの静的IPアドレスを利用することを目的としているため、行き詰まりです。

2
SSHのリバースプロキシソリューションが必要
こんにちは、プロジェクト用の企業データセンターにサーバーがある状況です。私はポート22でこのマシンにSSHアクセスできます。このサーバーで実行されている仮想マシンがいくつかあり、他の多くのオペレーティングシステムが動作しているすべての背後にあります。現在、データセンターのファイアウォールの背後にいるため、上司から、インターネット上の多くの人にこれらの仮想マシンに直接アクセスできるようにするために何かできるかどうか尋ねられました。22以外のポートでトラフィックを取得することが許可されていれば、ポート転送を実行できます。しかし、これは許可されていないので、この場合の解決策は何ですか?接続したい人は完全にばかかもしれませんが、自分のマシンでパテを開いただけで幸せになったり、ファイルジラになったりするかもしれません。 私はファイアウォールを手に持っていないか、22以外のポートを開いていません。実際に、それらが開くことを許可しないように要求しても、2回SSHは私のスーパーバイザーが望んでいないものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.