帶有 nginx 的通用持久連接池代理

帶有 nginx 的通用持久連接池代理

我遇到的問題是,實際上有 100 個不同的遠端伺服器不斷變化。我使用curl 透過 PHP 連接到這些,PHP 進程在完成後終止,並且無法保持連線開啟。以我目前的知識,我必須在 nginx 配置中設定每一項。以下適用於一台伺服器:

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;
    }
}

我的猜測是,持久連接是在連接埠上運行的伺服器之間匯集的88918889這是毫無意義的。

是否可以使 nginx 代理並池持久連接到任何地方?如果沒有,那麼製作這樣的代理商似乎微不足道。所以也許我不知道更好的解決方案已經存在。

答案1

您猜到了它不能按預期工作的原因。您正在嘗試使用 Nginx 作為轉發代理,儘管您這樣做是可能的,但有許多限制,因為 Nginx 並不是設計用於這種方式。您應該使用 Squid 甚至 Apache mod_proxy,它對轉發代理有更好的支援。

但:

您是否嘗試過在上游定義中使用 $http_host 變量,其中活著指令是?我幾乎可以肯定它不會起作用,但請告訴我:)

相關內容