iOS Safari无法访问Nginx部署网站:安全连接建立失败求助
解决iOS Safari无法访问Nginx托管网站的安全连接问题
排查方向1:禁用HTTP2协议
Nginx 1.10.0+版本默认会在listen 443 ssl时启用HTTP2,但部分iOS Safari版本对HTTP2的兼容性存在问题。你可以显式禁用HTTP2来验证:
- 修改所有443端口的
listen指令为:listen 443 ssl http2 off; - 重启Nginx:
sudo systemctl restart nginx - 用iOS Safari重新访问测试
排查方向2:调整TLS协议与加密套件
Certbot生成的options-ssl-nginx.conf可能配置了较新的TLS协议或套件,旧版iOS设备不支持。你可以修改这个文件或者在server块中覆盖配置:
- 打开
/etc/letsencrypt/options-ssl-nginx.conf,确保包含以下兼容iOS的配置:ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; - 保存后重启Nginx,测试访问
排查方向3:验证证书链完整性
虽然其他设备正常,但iOS对证书链的验证更严格。可以通过以下命令检查证书链:
openssl s_client -connect louislecouturier.fr:443 -showcerts
确保输出中包含完整的证书链(根证书、中间证书、服务器证书),如果缺失中间证书,重新生成Certbot证书:
sudo certbot renew --force-renewal
修改后的示例Server块(以主站为例)
server { server_name louislecouturier.fr www.louislecouturier.fr; location / { proxy_pass http://$server_addr:3000; } add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Frame-Options DENY always; listen 443 ssl http2 off; # 显式禁用HTTP2 ssl_certificate /etc/letsencrypt/live/louislecouturier.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/louislecouturier.fr/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; }
内容的提问来源于stack exchange,提问作者Louis Lecouturier
相关产品推荐
相关产品推荐

