![Nginx 负载均衡 https](https://linux22.com/image/689619/Nginx%20%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%20https.png)
我在通过 nginx 作为负载均衡器提供 https 服务时遇到了问题。我有以下配置:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name sub.domain.com;
root /usr/share/nginx/html;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
ssl_certificate /etc/ssl/[cert].crt;
ssl_certificate_key /etc/ssl/private/wildcard.[cert].com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers '[...]'
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/pki/tls/certs/dhparams.pem;
location /application { proxy_pass http://server0; }
location / {
return 301 http://www.domain.com;
}
}
我在“server0”上的 tomcat 上运行一个网站。有时(并非总是如此)我会在浏览器中收到混合内容错误,因为请求是通过 http 而不是 https 发送的。我无法以简洁的方式重现这些错误,因为它有时有效,有时根本不起作用。
关于如何进行诊断有什么线索吗?
编辑:没有对 http 进行编码调用。
答案1
假设您所有的调用都将转到server0
,那么/application/<something>
此问题的一个可能来源是,如果由 提供的网页server0
包含对静态资源的引用,并且是通过http
而不是 来获取的https
。
使用浏览器的开发者工具查看。使用 Chrome,在网络选项卡上,您可以看到浏览器在从上到下解析 HTML 时为获取其他资源而进行的所有单独调用,并且您也许可以发现哪些内容是通过不安全的调用传入的http
。
这不是负载均衡器的错误,而是 Web 应用程序实现的错误。