如今的互聯網公司通常不會直接自己直接配主機搭建服務器了,而是采用了類似阿里雲的這種雲主機,當應用變得越來越大了之后,就不可避免地增加主機,而出於成本考慮,不可能給每一台主機都分配公網帶寬,所以實際的情況可能會變成這樣:
內網IP為10.51.15.12和10.51.15.13的兩台主機並沒有外網帶寬,通常是作為后端數據庫服務器或者后端業務邏輯處理服務器使用,這樣我們會遇到一個問題:無法直接用SSH登錄這兩台服務器,如何解決這個問題?——當然是借助帶有公網IP的服務器“中轉”一下了,如下圖:
考慮到SSH其實走的是TCP協議,我們只需要在10.51.15.11上安裝和配置一個TCP中轉服務器即可,NGINX就具有這個功能。如何安裝和配置NGINX請移步這里:簡易NGINX TCP反向代理設置
這里介紹的內容和上述文章沒有太多不同,僅僅在配置上有一點點不一樣(而且還更簡單),編輯/etc/nginx/nginx.conf
stream{ upstream ssllink12{ server 10.51.15.12:22 max_fails=3 fail_timeout=10s; } upstream ssllink13{ server 10.51.15.13:22 max_fails=3 fail_timeout=10s; } server{ listen 1118; proxy_connect_timeout 20s; proxy_timeout 5m; proxy_pass ssllink12; } server{ listen 1119; proxy_connect_timeout 20s; proxy_timeout 5m; proxy_pass ssllink13; } }
配置很簡單,意思也很明確,將連接至1118端口的TCP請求轉至10.51.15.12:22,將連接至1119端口的TCP請求轉至10.51.15.13:22。
重啟NGINX:
systemctl restart nginx
如有必要,配置一下防火牆:
firewall-cmd --zone=public --add-port=1118/tcp --permanent firewall-cmd --zone=public --add-port=1119/tcp --permanent firewall-cmd --reload
然后直接用SSH試試看吧。
NGINX采用了“透明”的工作模式,以致SSH客戶端不知曉自己的連接請求其實已經被轉交到一台內網主機中了。