![nginx を使用したユニバーサル永続接続プール プロキシ](https://rvso.com/image/718154/nginx%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E3%83%A6%E3%83%8B%E3%83%90%E3%83%BC%E3%82%B5%E3%83%AB%E6%B0%B8%E7%B6%9A%E6%8E%A5%E7%B6%9A%E3%83%97%E3%83%BC%E3%83%AB%20%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7.png)
私が抱えている問題は、文字通り 100 個の異なるリモート サーバーが常に変化していることです。これらのサーバーに PHP で curl を使用して接続すると、PHP プロセスは完了後に終了し、接続を開いたままにする方法がありません。現在の私の知識では、nginx 構成で各サーバーをセットアップする必要があります。次の方法は、1 つのサーバーで機能します。
upstream some-server {
server some-server.com:443;
keepalive 20;
}
server {
listen 80;
server_name some-server.com;
location / {
proxy_pass https://some-server;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
唯一の問題は、アップストリームではsome-server.com
ハードコードされており、変数にすることができないことです。
以下は、同じもののユニバーサル バージョンを作成する私の試みです。プロキシは正しく行われますが、リモート サーバーへの永続的な接続プールは保持されません。
server {
listen 8889;
location / {
proxy_pass https://$http_host$request_uri;
resolver 8.8.8.8;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
upstream https-proxy {
server localhost:8889;
keepalive 20;
}
server {
listen 8891;
location / {
proxy_pass http://https-proxy;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
}
}
私の推測では、永続的な接続はポートで実行されているサーバー間でプールされており8891
、8889
これは無意味です。
nginx プロキシを作成して、任意の場所への永続的な接続をプールすることは可能ですか? そうでない場合、そのようなプロキシを作成するのは簡単なようです。そのため、私が知らないより良い解決策がすでに存在している可能性があります。
答え1
意図したとおりに動作しない理由はおわかりでしょう。Nginx をフォワード プロキシとして使用しようとしていますが、実行した方法では可能ですが、Nginx はそのように使用するように設計されていないため、多くの制限があります。フォワード プロキシのサポートが優れている Squid または Apache mod_proxy を使用する必要があります。
しかし:
アップストリーム定義で$http_host変数を使用してみましたか?生き続けるディレクティブとは何ですか? おそらく機能しないと思いますが、教えてください :)