You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Nginx将443端口的HTTPS请求按域名转发至其他端口

可行性与实现方案

完全可行,利用Nginx的SNI(Server Name Indication) 特性配合TCP转发功能即可实现——无需本地持有SSL证书,Nginx可以在不解密HTTPS流量的前提下,通过SNI字段识别请求的目标域名,再将TCP流量转发到对应后端端口。

实现步骤

1. 确认Nginx支持Stream模块

TCP转发依赖Nginx的stream模块,需确保编译时启用了该模块。执行以下命令检查:

nginx -V

输出中需包含--with-stream,如果没有,需要重新编译Nginx并添加该参数。

2. 编写Nginx配置

在Nginx主配置文件(通常是nginx.conf)中添加stream块配置,核心是通过ssl_preread开启SNI解析,并用map指令匹配域名转发:

stream {
    # 定义后端服务映射
    map $ssl_preread_server_name $backend_port {
        aaa.com 127.0.0.1:9001;
        bbb.com 127.0.0.1:9002;
        # 可添加更多域名-端口映射
        default 127.0.0.1:8080; # 默认转发端口(可选)
    }

    server {
        listen 443;
        ssl_preread on; # 开启SNI解析,不解密流量
        proxy_pass $backend_port; # 转发到匹配的后端端口
    }
}

3. 验证配置并重启Nginx

检查配置语法是否正确:

nginx -t

如果无报错,重启Nginx生效:

nginx -s reload

关键说明

  • ssl_preread on:这是实现无证书转发的核心,它让Nginx读取HTTPS握手时的SNI字段,从而识别请求域名,整个过程不会解密HTTPS流量。
  • 后端服务需自行处理HTTPS:因为Nginx只是透传TCP流量,后端端口(9001、9002)对应的服务必须配置好SSL证书并处理HTTPS请求。
  • 防火墙配置:确保服务器防火墙允许443端口的入站流量,以及本地9001、9002端口的内部转发流量。

内容的提问来源于stack exchange,提问作者realhuhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:42:38