Nginx通过域名代理tcp端口

碰到一种场景,使用 nginx 进行反向代理 tcp 端口,网上大部门的设置都是一个端口代理一个端口,没有一个端口通过域名代理后端多个端口的情况。

修改 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 中参数变成域名。

本作品采用《CC 协议》,转载必须注明作者和本文链接
微信公众号:码咚没 (ID: codingdongmei)
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。