我有一个在 nginx+unicorn 上运行的应用程序。我的服务器块如下所示
upstream rtdev{
# fail_timeout=0 means we always retry an upstream even if it failed
# to return a good HTTP response (in case the Unicorn master nukes a single worker for timing out).
server unix:/tmp/rtapp.sock fail_timeout=0;
}
server{
listen 443 ssl; # default;
server_name devapp.resolutiontweet.com;
root /home/xxxxxxx/xxxxxxxxx/public;
client_max_body_size 12M;
ssl on;
ssl_certificate xxxxxxxx/xxxxxxxxx.crt;
ssl_certificate_key xxxxxxxx/xxxxxxxxx.key;
ssl_ciphers "AES256+EECDH:AES256+EDH";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
location / {
access_log off;
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;
proxy_redirect off;
proxy_headers_hash_max_size 8192;
proxy_headers_hash_bucket_size 256;
proxy_pass http://rtdev;
#proxy_redirect http://rtdev https://devapp.resolutiontweet.com;
}
}
我遇到了一个奇怪的问题,Safari 不显示安全网站的“锁定”符号。所有其他浏览器都显示该符号(在 Chrome 和 Firefox 上测试过)。附上屏幕截图以供参考。
Mozilla Firefox Google Chrome Safari 修改我的服务器块中的几项内容可以解决问题,但网站无法加载。例如,更改可以
proxy_pass http://rtdev; --> proxy_pass https://rtdev;
解决问题,但 nginx 会抛出 501 错误。
如果有人能告诉我如何解决/调试这个问题,我将不胜感激。谢谢。
编辑:证书链接正确。我通过几个第三方网站验证了设置,一切似乎都很好。
答案1
我找到了原因,这与我的服务器配置无关。
显然,我使用的某个库动态注入了一个不安全的脚本。该脚本使用了http不是https。
Firefox 和 Chrome 会指示该页面包含不安全的脚本,而 Safari 则不会向用户提供任何反馈并将该页面显示为不安全。
我不知道该说些什么,是该赞扬苹果的过度谨慎,还是该责怪它缺乏视觉反馈。
参考:
https://stackoverflow.com/questions/3292697/find-out-what-resources-are-not-going-over-https
答案2
做
ssl_certificate xxxxxxxx/xxxxxxxxx.crt;
包含服务器证书以及所需的中间图表(通常由您的 CA 随证书提供)?
如果链不完整,可能会导致某些浏览器(尤其是智能手机)出现问题。