碰到一種場景,使用nginx進行反向代理tcp端口,網上大部門的設置都是一個端口代理一個端口,沒有一個端口通過域名代理後端多個端口的情況。
在sf上面看到一個設置教程,記錄下
只需要修改nginx.conf,添加如下配置即可,
stream {
map $ssl_preread_server_name $name {
mysql.test.com mysql;
redis.test.com redis;
default https_default_backend;
}
upstream mysql{
server 10.0.0.3:3306;
}
upstream redis{
server 10.0.0.4:6379;
}
upstream https_default_backend {
server 127.0.0.1:443;
}
server {
listen 10.0.0.1:443;
proxy_pass $name;
ssl_preread on;
}
}
stream 模塊可能會沒有。百度下nginx 添加stream 模塊即可
stream 是一個單獨的模塊,不需要放在nginx-http配置中,放在nginx.conf最後即可
或者
stream {
upstream mysql{
server 10.1.5.3:3306;
}
upstream redis{
server 10.1.5.4:6379;
}
map $server_addr $bane {
192.168.168.238 mysql;
192.168.168.239 redis;
}
server {
listen 80;
proxy_pass $name;
}
}
只需要把map中參數變成域名即可
參考:
https://stackoverflow.com/questions/34741571/nginx-tcp-forwarding-based-on-hostname/40135151#40135151