我已经配置了Nginx负载均衡器,因此可以使用更多Nginx + PHP5-FPM服务器来分割流量。负载均衡器Nginx website.com.conf(vhost)配置为:
upstream backend {
ip_hash;
server IP_NGINX_PHP5FPM_NODE1;
server IP_NGINX_PHP5FPM_NODE2;
}
server {
listen 80;
server_name www.website.com website.com;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
}
因此,当用户通过HTTP访问网站时,负载均衡器可以使用两个节点来处理流量。一切都可以正常使用HTTP,但我需要它来支持HTTPS。所以我把它编辑为:
upstream backend {
ip_hash;
server IP_NGINX_PHP5FPM_NODE1;
server IP_NGINX_PHP5FPM_NODE2;
}
server {
listen 80;
listen 443 ssl;
server_name www.website.com website.com;
ssl on;
ssl_certificate /var/www/website.com/ssl/website-bundle.crt;
ssl_certificate_key /var/www/website.com/ssl/diosesbueno.key;
ssl_buffer_size 8k;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /var/www/website.com/ssl/trustchain.crt;
ssl_dhparam /var/www/website.com/ssl/dhparam.pem;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5:!kEDH;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
}
如果我通过HTTPS访问该网站,它会起作用,但Firefox表示该网站包含未加密的元素并发出警报,请参阅此屏幕截图:http://postimg.org/image/m15g9zgzh/
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
这可能与你的nginx配置无关。
您有可能通过HTTP链接引用页面中的某些文件 - 图像,JavaScript,CSS等。确保您使用的是相对网址。 Chrome的网络检查员的错误控制台实际上会告诉您触发警告的确切网址。
答案 1 :(得分:1)
感谢@ceejayoz和@Martin的回答,我在网站页面中发现了与混合内容HTTPS / HTTP相关的问题。基本上,后端Nginx节点通过HTTP将网站内容发送到Nginx加载blancer HTTPS。由于这个原因,向用户显示的网页在代码中有一些HTTP链接。所以为了解决这个问题,我在Nginx节点中也增加了对SSL的支持,并且修改了Nginx负载均衡器vhost以支持代理传递指令中的https:
proxy_pass https://backendssl;
SSL服务器内部:
server {
listen 443 ssl;
这是上游后端的内容:
upstream backendssl {
ip_hash;
server IP_ADDRESS_NODE1:443;
server IP_ADDRESS_NODE2:443;
}
由于网站总是需要HTTPS连接,我还补充说:
server {
listen 80;
server_name www.website.com website.com;
return 301 https://$server_name$request_uri;
}
在Nginx负载均衡器vhost中。
希望这对其他用户有帮助!
答案 2 :(得分:0)
我认为该错误与您的服务器设置无关,但由于页面上的某些内容是使用http包含的。查看FireBug中的网络选项卡,查看是否有任何内容通过。 HTTP。通常是.js或css