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

请求配置支持HTTP/HTTPS的Nginx SSL穿透反向代理(保留80端口HTTP)

问题分析与解决方案

你的核心问题是HTTP流量无法正确转发到上游服务器,原因是当前http块仅配置了HTTPS重定向,没有针对HTTP流量的代理规则,同时缺少对应80端口的上游服务器定义。另外你的stream块配置存在语法错误,需要先修正。

第一步:修正Stream块的语法错误

site3_backend中的两行server配置末尾缺少分号,会导致Nginx启动失败,先补上:

upstream site3_backend {
    server 3.1.1.1:443;
    server 3.1.1.2:443;
}

第二步:添加HTTP流量的上游与代理配置

需要为HTTP流量单独定义80端口的上游服务器,并在http块中配置域名匹配规则,将80端口的请求转发到对应上游:

完整修改后的配置示例

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

stream {
    map $ssl_preread_server_name $name {
        site1.com site1_backend_ssl;
        site2.com site2_backend_ssl;
        site3.com site3_backend_ssl;
    }

    # HTTPS流量的上游(443端口)
    upstream site1_backend_ssl {
        server 1.1.1.1:443;
        server 1.1.1.2:443;
    }

    upstream site2_backend_ssl {
        server 2.1.1.1:443;
    }

    upstream site3_backend_ssl {
        server 3.1.1.1:443;
        server 3.1.1.2:443;
    }

    server {
        listen 443;
        proxy_pass $name;
        ssl_preread on;
    }
}

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  90;

    # 定义HTTP流量的上游(80端口)
    upstream site1_backend_http {
        server 1.1.1.1:80;
        server 1.1.1.2:80;
    }

    upstream site2_backend_http {
        server 2.1.1.1:80;
    }

    upstream site3_backend_http {
        server 3.1.1.1:80;
        server 3.1.1.2:80;
    }

    # 为每个域名配置HTTP代理
    server {
        listen 80;
        server_name site1.com;
        proxy_pass http://site1_backend_http;
        # 传递必要的请求头,保证上游服务器获取原始请求信息
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    server {
        listen 80;
        server_name site2.com;
        proxy_pass http://site2_backend_http;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    server {
        listen 80;
        server_name site3.com;
        proxy_pass http://site3_backend_http;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 处理未匹配的域名请求
    server {
        listen 80 default_server;
        server_name _;
        return 404;
    }
}

简化配置可选方案

如果觉得逐个配置server块繁琐,可以用map简化HTTP流量的匹配逻辑:

http {
    # ... 保留原有http块基础配置 ...

    map $host $http_upstream {
        site1.com site1_backend_http;
        site2.com site2_backend_http;
        site3.com site3_backend_http;
    }

    server {
        listen 80;
        server_name _;
        proxy_pass http://$http_upstream;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 拦截未匹配的域名请求
        if ($http_upstream = "") {
            return 404;
        }
    }
}

配置验证

修改完成后,执行以下命令检查配置语法并重启Nginx:

nginx -t
systemctl restart nginx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:44:58