nginx 通過域名代理tcp端口

碰到一種場景,使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章