CentOS6 VPS中Nginx配置Let's Encrypt SSL后部分页面不安全求助
嘿,咱们来搞定为啥主站www.mywebsite.com能正常显示安全,但www.mywebsite.com/otherpages却提示不安全、证书无效的问题。结合你给出的Nginx配置片段和场景,大概率是SSL配置没覆盖全请求路径或者存在混合内容,一步步来排查:
1. 先确认你的SSL Server块配置是否完整
你提供的只有80端口的非SSL配置,而Let's Encrypt证书必须在443端口的server块里配置。先检查你的Nginx配置(比如/etc/nginx/conf.d/default.conf或者主配置文件)里有没有类似这样的443端口server块:
server { listen 443 ssl default_server; # 如果服务器支持IPv6,可以打开下面这行 # listen [::]:443 ssl default_server; server_name www.mywebsite.com; # 这里要指向Let's Encrypt生成的正确证书路径 ssl_certificate /etc/letsencrypt/live/www.mywebsite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.mywebsite.com/privkey.pem; root /usr/share/nginx/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } # 确保/otherpages没有被单独配置到非SSL块里 location /otherpages { try_files $uri $uri/ =404; # 这里不需要额外配置证书,继承上面的ssl设置就行 } }
如果没有这个443的server块,那就是根本没配置SSL监听——不过你说主站能显示安全,那应该是有这个块,但可能server_name没匹配到,或者/otherpages的请求被错误路由到了80端口的非SSL块。
2. 强制所有HTTP请求跳转到HTTPS
修改你现有的80端口server块,把所有HTTP请求重定向到HTTPS,这样就不会有非SSL的请求出现:
server { listen 80 default_server; # listen [::]:80 default_server; server_name _; # 301永久重定向到HTTPS,保留原请求路径 return 301 https://$host$request_uri; }
3. 检查/otherpages是否有独立的错误配置
如果你的Nginx配置里给/otherpages单独加了location块,一定要确保这个块是在443的SSL server块里面,而不是80端口的非SSL块里,也不要在里面设置任何跳转到HTTP的规则。
4. 排查混合内容问题
有时候证书本身是有效的,但页面里引用了HTTP协议的资源(比如图片、JS、CSS文件),浏览器也会提示“不安全”。你可以打开浏览器开发者工具(按F12),切换到「控制台」标签,看看有没有「混合内容(Mixed Content)」的错误提示,把这些资源的引用改成HTTPS即可。
最后验证配置并重启Nginx
修改完配置后,先测试配置是否合法:
nginx -t
如果输出显示test is successful,就重启Nginx让配置生效:
service nginx restart
内容的提问来源于stack exchange,提问作者roh_dev

