다음과 같이 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-IP
HTTP를 기반으로 하지 않기 때문에 프록시 연결에 이와 같은 것을 추가할 수는 없습니다). .
자세한 내용과 예시는 다음을 확인하세요.
답변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/