Nginx 中按域名转发 TCP 连接
编译安装 Nginx
上接 NGINX 入门指导,由于安装版本号为 1.20.1 所以不考虑旧版适配问题,其中编译选项增加的模块 --with-stream
和 --with-stream_ssl_preread_module
就是本次需要的功能模块。
配置 Nginx
由于是转发的 TCP 连接,所以不再使用在 http 模块中添加内容,而是在 stream 中添加,如下是简单的 TCP 连接转发配置:
stream {
server {
listen 7854;
proxy_connect_timeout 3s;
proxy_timeout 3600s;
proxy_pass 127.0.0.1:3306;
}
}
本次使用 ssl_preread
功能实现依据域名转发 TCP 连接。
stream {
map $ssl_preread_server_name $name {
git.aecra.cn git_ssh_backend;
default ssh_default_backend;
}
upstream git_ssh_backend {
server 127.0.0.1:7022;
}
upstream ssh_default_backend {
server 127.0.0.1:1022;
}
server {
listen 22;
proxy_connect_timeout 3s;
proxy_timeout 36000s;
proxy_pass $name;
ssl_preread on;
}
}
其中 7022 端口是 Git 服务,1022 端口是 ssh 服务。通过 Nginx 的转发我们可以在一个 22 端口上实现多个 ssh 服务。