混合内容报错需优先定位浏览器拦截的不安全URL,检查Nginx是否透传X-Forwarded-Proto头,后端据此生成HTTPS链接,并配置CSP upgrade-insecure-requests头自动升级请求,同时设置80端口301跳转HTTPS。

排查 Nginx HTTPS 环境下后端 HTTP 与前端 HTTPS 混合内容报错,关键不是查 Nginx 日志,而是定位浏览器实际发出的不安全请求,并确认协议传递、响应策略和资源路径是否协同一致。
看浏览器控制台和网络面板找具体被拦的 URL
打开 Chrome 或 Edge 的开发者工具(F12),切换到 Console 面板,所有红色报错都会明确写出被拦截的完整地址,例如:
- Mixed Content: The page at 'https://example.com/' was loaded over HTTPS, but requested an insecure script 'http://api.example.com/login'
- Mixed Content: ... requested an insecure image 'http://cdn.example.com/logo.png'
这些 URL 就是你要修复的靶点。再切到 Network 面板,顶部过滤栏输入 Mixed,或手动筛选状态为 blocked:mixed-content 的请求,重点关注其 Protocol 列是否为 http、Initiator 是哪段 HTML/JS 触发的。
确认后端是否收到真实 HTTPS 协议
如果被拦的是后端接口(如 /api/user),大概率是后端生成了 http:// 地址,因为它没识别出用户其实是通过 HTTPS 访问的。检查 Nginx 反向代理配置中是否包含:
立即学习“前端免费学习笔记(深入)”;
- proxy_set_header X-Forwarded-Proto $scheme;(必须加在 location 或 server 块内)
- proxy_set_header Host $host;(避免后端因 Host 不匹配返回 404)
后端服务(如 Spring Boot、Node.js)需读取 X-Forwarded-Proto 头来判断协议,并据此拼接跳转地址或 API 基础路径。可临时打印该 header 值,验证是否为 https。
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
用 CSP 响应头自动升级不安全请求
在 Nginx 的 HTTPS server 块(listen 443 ssl)中添加:
- add_header Content-Security-Policy "upgrade-insecure-requests" always;
这行指令会让浏览器自动把页面内所有 http:// 子资源请求(图片、脚本、AJAX、iframe 等)升级为 https:// 发出,无需改前端代码。注意:
- 若已存在其他 CSP 头,需合并而非覆盖,例如:
"upgrade-insecure-requests; default-src 'self'; img-src 'self' data: https:; script-src 'self' https:;" - 该头只对 HTTPS 页面生效,不要加在 HTTP server 块里
-
always参数确保 304、404、500 等所有响应都带上,避免缓存导致缺失
补上 80 端口强制跳转堵住源头
仅靠 CSP 升级不够彻底。用户仍可能直接访问 http://example.com,导致整个页面以 HTTP 加载,后续所有资源默认走 HTTP。新增一个监听 80 端口的 server 块:
- server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
这样所有 HTTP 请求都会被 301 重定向到 HTTPS,从入口层面减少混合内容产生条件。
不复杂但容易忽略















