nginx를 사용한 범용 영구 연결 풀 프록시

nginx를 사용한 범용 영구 연결 풀 프록시

내가 가진 문제는 문자 그대로 계속 변경되는 원격 서버가 100개 있다는 것입니다. 컬을 사용하여 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;
    }
}

내 생각 엔 포트에서 실행되는 서버 사이에 지속적인 연결이 풀링되어 8891있으며 8889이는 의미가 없습니다.

nginx 프록시를 만들고 어디에서나 영구 연결을 풀 수 있습니까? 그렇지 않다면 그러한 프록시를 만드는 것이 사소한 것처럼 보입니다. 어쩌면 내가 모르는 더 나은 해결책이 이미 존재할 수도 있습니다.

답변1

의도한 대로 작동하지 않는 이유를 짐작하셨을 겁니다. Nginx를 순방향 프록시로 사용하려고 하며 그렇게 하는 것이 가능하더라도 Nginx는 그런 방식으로 사용하도록 설계되지 않았기 때문에 많은 제한 사항이 있습니다. 정방향 프록시를 더 잘 지원하는 Squid나 Apache mod_proxy를 사용해야 합니다.

하지만:

업스트림 정의에서 $http_host 변수를 사용해 보셨나요?살아 유지지시어는? 나는 그것이 작동하지 않을 것이라고 거의 확신하지만 알려주세요 :)

관련 정보