서버 호스트 이름별 역방향 TCP 프록시 포트 80 및 443

서버 호스트 이름별 역방향 TCP 프록시 포트 80 및 443

공용 IP 주소가 하나 있습니다. 요청된 서버 이름으로 구별되는 여러 서비스에 대해 포트 80 및 443의 공용 IP를 통해 액세스를 허용하려고 합니다.

그러나 하나의 서비스에는TCP공용 IP의 포트 80 및 443에서 역방향 프록시가 작동합니다. 다른 하나는 TCP 역방향 프록시가 필요하지만 포트 443에만 있습니다. 나머지는 단지 웹사이트이고 http 역방향 프록시로는 괜찮지만 방문자와 letsencrypt가 쉽게 사용할 수 있도록 포트 80과 443에서 웹사이트에 공개적으로 액세스할 수 있기를 바랍니다.

간단하게 유지하기 위해 필요한 만큼 많은 VM과 개인 IP를 스핀업할 수 있지만 하나의 공용 IP 주소로 제한됩니다.

SNI를 사용하여 nginx 설정을 역방향 프록시로 수행할 수 있나요? 이론적으로는 다른 포트에서 수신 대기하기 위해 필요한 웹 사이트 설정이 있는 두 번째 웹 서버를 사용하여 적절한 서버로 전달되는 SNI를 사용하여 호스트 이름으로 모든 것을 tcp 스트리밍할 수 있어야 한다고 생각합니다. 예를 들어, nginx.conf:

stream {

    map $ssl_preread_server_name $name {
            serviceone.domain.tld serviceone;
            servicetwo.domain.tld servicetwo;
            website1.domain.tld website1;       
            website2.domain.tld website2;   
    }

    upstream serviceone {
            server 10.1.99.7:443;
    }

    upstream servicetwo {
            server 10.1.99.20:443;
    }

    upstream website1 {
            server 10.1.99.30:10443;
    }

    upstream website2 {
            server 10.1.99.30:10444;
    }


    server {
            listen 443;
            listen 80;
            resolver 8.8.8.8;

            proxy_pass $name;
            ssl_preread on;
    }

}

내 nginx.conf에 위와 비슷한 작업이 있지만 포트 80 요청이 어떻게 방정식에 포함되는지 이해하는 데 약간 어려움을 겪고 있습니다. 서버 블록에서 80을 수신했지만 요청이 어떻게 처리되는지 설명할 수 없었습니다. 동일한 서버 이름을 요청하는 경우 443과 80을 구분함)

nginx나 haproxy 등을 사용하여 더 나은 방법을 사용할 수 있습니다. 감사합니다!

답변1

각 호스트 이름에 대해 별도의 server{...} 블록을 사용하세요.

추가 모듈에 대한 종속성 없이 작업을 수행하며 업스트림 서버가 프록시에 필요한 구성이 다를 경우 많은 어려움을 덜어줄 것입니다.

관련 정보