配置反向代理将HTTP设为80端口后出现「HTTP请求发至HTTPS端口」错误
修复Nginx "400 Bad Request: The plain HTTP request was sent to HTTPS port" 错误
错误根源在于你将HTTP(80)和HTTPS(443)的监听规则放在了同一个server块中,并且启用了ssl on指令——这会强制80端口也要求HTTPS连接,普通HTTP请求打到80端口时就会触发这个报错。
以下是修复后的完整配置:
# 处理80端口的HTTP请求,自动跳转到HTTPS server { listen 80; listen [::]:80; server_name example.com; return 301 https://www.example.com$request_uri; } # 处理443端口的HTTPS请求 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com www.example.com; # 替换为你的实际证书路径 ssl_certificate /path/to/your/fullchain.crt; ssl_certificate_key /path/to/your/private.key; # 这里添加你的反向代理核心配置,示例如下: location / { proxy_pass http://your-backend-service-ip:port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
关键修改说明:
- 拆分server块:80端口单独作为一个纯HTTP的server块,只负责跳转,不需要任何SSL相关配置。
- 443端口的server块仅保留HTTPS监听和SSL配置,确保
server_name覆盖你需要的域名(包括带www的)。 - 补全第二个server块中缺失的反向代理配置(你原配置里第二个server块未写完),根据实际后端服务调整
proxy_pass参数。 - 替换证书路径占位符为你服务器上的真实证书文件路径。
内容的提问来源于stack exchange,提问作者Ritik Barnwal
相关产品推荐
相关产品推荐

