![NGINX 反向代理 ssh 到多個主機](https://rvso.com/image/1605165/NGINX%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%20ssh%20%E5%88%B0%E5%A4%9A%E5%80%8B%E4%B8%BB%E6%A9%9F.png)
使用 NGINX,我有多個反向代理,可以與各種網站的正常 http 一起使用。我只有一個公用 IP 位址,但後面有多個虛擬主機。這部分正在正常工作。
我想透過 ssh 存取 nginx 後面的所有主機,目前只有三個,但將來還會有更多。
由於 nginx 版本高於 1.9.1,我認為這是允許流的版本,我已經開始為 ssh 配置,稍後我想添加資料庫,也許還有郵件,但目前 ssh 是優先考慮的。
因此,首先我將 ssh_available 和 ssh_enabled 加入到 nginx 目錄。
/etc/nginx/nginx.conf 我添加了以下內容:
stream {
include /etc/nginx/ssh_enabled/*;
}
/etc/nginx/ssh_available/domain.com.rproxy.conf 我有以下內容:
upstream ssh {
server 192.168.1.61:22;
}
server {
listen 22;
proxy_pass ssh;
}
我使用了通常的方法,將 ssh_enabled 中的符號連結新增到 ssh_available 中的 conf 檔案中。
這允許我透過 ssh 連接到 nginx 反向代理程式後面的一台主機,但僅限一台主機。
使用目前配置,無論我使用公用 IP、子網域還是 FQDN,SSH 連線始終位於同一主機上。
我怎麼能把它變成更便攜的東西,以便它可以與多個主機/網域一起工作,而不僅僅是一個IP/網域?
我想要發生的是使用網域進行 ssh 並連接到託管它的伺服器。
答案1
我想出了一個解決方法,這意味著比我想要的更多的開放端口,因為迄今為止 ssh 不接受域,有一個 IPV6 解決方案,但目前這不是我的解決方案。
所以連接埠更多。
這是我的解決方案。將小範圍的連接埠轉送給 nginx,為每個伺服器提供足夠的連接埠。您幾乎可以選擇任何連接埠範圍,也可以選擇您的選擇,但為了使這個範例盡可能簡單,範圍更容易。
我修改了在 /etc/nginx/ssh_available/ 中建立的conf文件
upstream 59 {
server 192.168.1.59:22;
}
server {
listen 22059;
proxy_pass 59;
}
upstream 61 {
server 192.168.1.61:22;
}
server {
listen 22061;
proxy_pass 61;
}
upstream 62 {
server 192.168.1.62:22;
}
server {
listen 22062;
proxy_pass 62;
}
upstream 63 {
server 192.168.1.63:22;
}
server {
listen 22063;
proxy_pass 63;
}
當然,這樣您會受到網路上可用 IPV4 位址數量的限制,IPV6 本來是一個更好的選擇,但我還沒有。
請注意,如果您按原樣使用此範例,則您將透過將內部 IP 作為連接埠號碼提供給可能想要解決該問題的任何人來宣傳您的網路基礎架構的一部分。您應該真正挑選您打開的連接埠並適當地設定配置。
最後不是,這在我看來不是一個很好的答案,但它是一個有效的答案,因此出於這個原因我發布它,但不接受它作為解決方案。您可能有比我想出的更好的 IPV4 方法,我絕對歡迎您的回答。