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

Nginx反向代理HTTP端口配置后仍返回400错误(The plain HTTP request was sent to HTTPS port)求助

Nginx反向代理HTTP端口配置后仍返回400错误(The plain HTTP request was sent to HTTPS port)求助

看起来你遇到的这个问题挺典型的,我来帮你梳理下可能的原因和解决方向:

1. 排查是否存在冲突的Server块

最常见的原因是有另一个Server块也监听了8080端口,并且配置了SSL,导致Nginx把你的HTTP请求错误匹配到了那个HTTPS的Server块里。

你可以用这个命令查看Nginx加载的完整生效配置(包括所有include的子配置):

nginx -T

仔细搜索输出里的listen 8080,看看有没有其他Server块是listen 8080 ssl;的形式——如果有的话,要么修改那个块的监听端口,要么给你的HTTP Server块加上default_server参数,确保它优先匹配请求:

listen 8080 default_server;

2. 确保SSL配置完全失效

虽然你注释了SSL证书相关的配置,也加了ssl off;,但有时候Nginx可能会继承上层配置(比如http块里的全局SSL设置),或者残留的配置片段仍在生效。你可以尝试在Server块里明确清空证书路径:

ssl_certificate "";
ssl_certificate_key "";

这样能彻底切断这个Server块和SSL配置的关联。

3. 验证后端IIS服务器的配置

会不会是后端的IIS服务器本身把8080端口配置成了HTTPS监听?你可以直接访问后端服务器的http://[server name]:8080,如果直接访问也返回同样的400错误,那问题就出在后端IIS的端口配置上,需要调整IIS的站点绑定,确保8080端口是HTTP协议。

4. 重启Nginx并清理缓存

修改配置后,一定要确保Nginx正确加载了新配置:

  1. 先测试配置语法是否正确:
nginx -t
  1. 语法没问题的话,重启Nginx(reload有时候可能不生效,建议直接重启):
systemctl restart nginx  # 适用于systemd系统
# 或者
nginx -s stop && nginx  # 通用方式

另外,浏览器的缓存可能会强制用HTTPS访问,建议用无痕模式测试,或者清空浏览器缓存后再试。

给你一个调整后的参考配置:

server {
    listen 8080 default_server;
    server_name [SITE];

    ssl off;
    ssl_certificate "";
    ssl_certificate_key "";

    location / {
        proxy_http_version 1.1;
        proxy_pass http://[server name]:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 建议加上,方便后端记录真实请求IP
    }
}

备注:内容来源于stack exchange,提问作者happybovine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:12:58