NGINX를 다른 포트 번호에 대한 역방향 프록시로 구성하는 방법은 무엇입니까?

NGINX를 다른 포트 번호에 대한 역방향 프록시로 구성하는 방법은 무엇입니까?

다음과 같이 http 요청에 대한 역방향 프록시로 NGINX를 구성했습니다.

server {
    listen 80;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:3000;
    }
}

또한 SSH(포트 22) 요청을 프록시하고 싶습니다. 동일한 구성 파일에 이와 같은 다른 서버 블록을 추가할 수 있습니까?

server {
    listen 22;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:22;
    }
}

최종 결과는 다음과 같습니다.

server {
    listen 80;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:3000;
    }
}
server {
    listen 22;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:22;
    }
}

답변1

이것SSH 프로토콜HTTP를 기반으로 하지 않으므로 일반 프록시를 통해 프록시할 수 없습니다.proxy_pass~의ngx_http_proxy_module

그러나 최근부터nginx1.9.0(2016-04-26의 1.10.0과 함께 안정적인 릴리스), nginx는 지원을 받습니다.TCP 스트림프록시, 즉 충분히 새로운 nginx 버전이 있는 경우 이를 실제로 SSH 연결을 프록시하는 데 사용할 수 있음을 의미합니다(단, X-Real-IPHTTP를 기반으로 하지 않기 때문에 프록시 연결에 이와 같은 것을 추가할 수는 없습니다). .

자세한 내용과 예시는 다음을 확인하세요.

답변2

Nginx 버전 1.9.0부터 NGINX는 --with-stream을 사용하여 활성화해야 하는 ngx_stream_core_module 모듈을 지원합니다. 스트리밍 모듈이 활성화되면 TCP 프록시를 통해 SSH 프로토콜을 사용할 수 있습니다.

stream {
    upstream ssh {
        server 192.168.1.12:22;
    }
    server {
        listen        12345;
        proxy_pass    ssh;
    }
}

https://www.nginx.com/resources/admin-guide/tcp-load-balancing/

관련 정보