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

Nginx HTTP转HTTPS重定向报400错误,如何修复请求发至HTTPS端口问题?

问题分析与修复方案

错误根源

  1. 流量路径错误:你直接访问了应用的8080端口,而不是Nginx监听的80端口,导致Nginx的HTTP转HTTPS重定向规则完全没生效。
  2. 应用端口配置矛盾:应用的8080端口实际被配置为HTTPS监听,当收到纯HTTP请求时,就会返回400 Bad Request(提示The plain HTTP request was sent to HTTPS port)。

修复方案

方案1:使用正确的Nginx入口访问(推荐)

你应该通过Nginx的80端口发起HTTP请求,而不是直接访问应用的8080端口。此时Nginx会自动执行301重定向到应用的HTTPS端口,最终返回200。

测试命令:

curl -IL http://app1.internal.example.com

预期结果:先返回301 Moved Permanently,随后跳转到https://app1.internal.example.com:8443并返回200 OK。

方案2:修复应用的8080端口配置

如果你的应用确实需要通过8080端口提供HTTP服务,检查应用配置文件,确保8080端口绑定的是HTTP协议,而非HTTPS协议。解除该端口的SSL/TLS配置后,纯HTTP请求即可正常返回内容。

方案3:让Nginx接管应用的8080端口

如果希望所有流量都经过Nginx处理,新增一个监听8080端口的server块,将该端口的HTTP请求重定向到HTTPS:

server {
    listen 8080;
    listen [::]:8080;

    server_name app1.internal.example.com;

    return 301 https://app1.internal.example.com:8443$request_uri;
}

修改完成后重启Nginx,此时访问http://app1.internal.example.com:8080会被Nginx重定向到HTTPS端口,最终返回200。


额外优化:修正Nginx 443端口代理配置

当前Nginx的443端口代理指向http://localhost:5000,但你的应用实际在8443端口提供HTTPS服务,需调整代理地址并补充HTTPS代理相关配置:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name app1.internal.example.com;

    # 配置你的SSL证书路径
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;

    location ^~ / {
        proxy_pass https://localhost:8443;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        # 确保代理HTTPS时正确解析服务器名称
        proxy_ssl_server_name on;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:15:20