需求缘由:
- 当 VPS 在墙外时,SSH 的默认 22端口 是个非常敏感的端口,极为容易被墙主动干扰造成 SSH 登录失败。
- 若是被墙扫描到正在连接 22端口 且墙的执行策略决定干扰你这个连接,则此时不仅 22端口 被阻断,而是所有端口都会被关闭会话。虽然一分钟内就能恢复其他端口畅通(22端 口仍被阻断),但一些保持会话的 Web 网页服务会异常需要重新刷新页面建立会话。
解决思路:
SSH使用非22端口
1、根本性修改SSH配置文件,使用其他非 22 端口
2、其他端口转发到 22 端口
注意事项:
Nginx 反代 TCP 协议必须使用 stream 模块,不能使用 http 模块,因 http 的 proxy_pass 无法承载TCP协议,所以关于stream的配置只能写到Nginx的主配置文件,而不是某个新建网站的子配置文件。
更多问题
关于Nginx proxy_connect_timeout 的问题
Nginx反向代理TCP协议端口
-
查询Nginx确认已安装模块"–with-stream",宝塔面板安装Nginx环境默认是带有stream模块的
root@vps:~# nginx -V nginx version: nginx/1.20.1 built with OpenSSL 1.1.1k 25 Mar 2021 TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=srclib/ngx_devel_kit --add-module=srclib/lua_nginx_module --add-module=srclib/ngx_cache_purge --add-module=srclib/nginx-sticky-module --with-openssl=srclib/openssl --with-pcre=srclib/pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-http_dav_module --add-module=srclib/nginx-dav-ext-module
-
stream代码模块追加到Nginx的主配置文件
-
务必注意:stream 模块与 http 模块处于同一级!捋清楚 Nginx主配置文件 中你要添加位置的上一个 “}” 的定义范围,不要级别错误!
-
将以下 stream代码模块 追加到 Nginx主配置文件nginx.conf,可以添加最末尾,可以添加 http模块 前面,也可以将添加到 “worker_rlimit_nofile 51200 和 events 之间”:
#stream模块与http模块处于同一级;这两个模块可以共存。 stream { upstream ssh{ server 127.0.0.1:22; #源服务 } upstream http{ server 127.0.0.1:80; #源服务 } server { listen 22822; #监听代理主机的端口 proxy_connect_timeout 1h; proxy_timeout 1h; proxy_pass ssh; #转向的服务 } server { listen 22880; ##监听代理主机的端口 proxy_connect_timeout 1h; proxy_timeout 1h; proxy_pass http; ##转向的服务 } }
-
重新加载配置,完成
Q.E.D.