How to configure NGINX as a reverse proxy for different port numbers?
The ssh protocol is not based on HTTP, and, as such, cannot be proxied through the regular proxy_pass
of ngx_http_proxy_module
However, recently, starting with nginx 1.9.0 (released as stable with 1.10.0 on 2016-04-26), nginx did gain support for doing TCP stream proxying, which means that if you have a recent-enough version of nginx, you can, in fact, proxy ssh connections with it (however, note that you wouldn't be able to add anything like the X-Real-IP
to the proxied connection, as this is not based on HTTP).
For more information and examples, take a look at:
- http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html
- https://stackoverflow.com/questions/34741571/nginx-tcp-forwarding-based-on-hostname/34958192#34958192
Since Nginx Version 1.9.0,NGINX support ngx_stream_core_module module, it should be enabled with the --with-stream. When stream module is enable they are possible to ssh protocol tcp proxy
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/