我需要通过同一域的 NGINX 代理 SSH。我在端口 80 上设置了一个代理,工作正常。但我需要将端口 22 代理到同一台服务器。
原始配置:
upstream web {
least_conn;
server 10.0.0.4;
}
server {
access_log /var/log/nginx/web.com combined;
index index.html index.htm index.php;
server_name www.web.com web.com;
location /{
proxy_pass http://web;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
我的 22 端口配置如下:
stream {
upstream ssh {
server 10.0.0.17:22;
}
server {
listen 22;
server_name gitlab.web.com;
proxy_pass ssh;
}
}
当我连接到域时,它尝试连接 nginx 服务器而不是 10.0.0.17。
答案1
对于通过 Nginx 的 SSH 代理,请为 SSH 服务器使用端口 22 以外的其他端口
# use a different port for SSH client if Ngnix uses
# port 22
Port 8022
或者,如果您想保留 SSH 服务器的端口 22,您可能需要配置 Nginx 配置以使用其他端口
stream {
upstream ssh {
server 10.0.0.17:22;
}
server {
listen 8022;
server_name gitlab.web.com;
proxy_pass ssh;
}
}
如果您以这种方式配置,您的 GitLab CE/EE 用户可能需要执行以下操作:
# unless you blocked port 22, users who do Git-over-SSH need to configure
# stuff on their clients instead of doing this.
ssh [email protected] -p 8022