如何configurationnginx通过subdomain.domain.tld:80使ssh服务器可用

我想通过端口80上的子域使端口22上的ssh服务器可用。

我认为这应该是这样的:

server { listen ssh.domain.tld:80; server_name ssh.domain.tld; location / { proxy_pass http://localhost:22; } } 

但它不会工作。 nginx会接受这个并从这个configuration开始,但是我只能从ssh.domain.tld:80得到空的响应。

我错过了什么?

你应该使用sslh 。

将nginx配置为在不同于80的端口上运行,比如800,然后配置sslh以将Web流量重定向到/etc/default/sslh.conf文件中的该端口。

这个设置可能需要15分钟。 或更少。

基本上你看错了地方:

  • 股票nginx可以代理网络和/或电子邮件的流量,它根本不处理ssh流量
  • 该子域是一个DNS ISUE:配置它在你的DNS设置,你需要一个A和/或AAAA记录链接ssh.domain.tld到您的SSH服务器的ip-adres
  • 您的ssh服务器监听的端口是ssh服务器设置(请参阅man sshd_config特别是listnAddressPort指令)

由于Nginx版本1.9.0,NGINX支持ngx_stream_core_module模块,所以应该使用–with-stream启用。 当流模块启用时,他们有可能ssh协议tcp代理

 stream { upstream ssh { server localhost:22; } server { listen 80; proxy_pass ssh; } } 

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