Certbot续期SSL证书后Nginx出现移动端火狐重定向错误,配置是否有误?
配置存在3个明确错误,是导致重定向异常和访问不稳定的核心原因:
- 443端口重定向逻辑冲突:第二个监听443的server块同时匹配
sozcafe.de和www.sozcafe.de,且规则为返回301到https://$server_name$request_uri,其中$server_name取当前块第一个域名sozcafe.de。当https://sozcafe.de的请求匹配到该块时,会触发无限循环重定向,不同浏览器对重定向次数上限的判定逻辑不同,移动端Firefox校验更严格就会直接抛出重定向错误。 - SSL证书覆盖范围不匹配:所有443块仅配置了
sozcafe.de的证书,如果你需要支持www.sozcafe.de访问,需要确认Certbot续期证书时是否将www.sozcafe.de加入域名列表。如果证书缺少www子域名的主题备用名,会触发证书校验错误,部分浏览器会降级跳过校验,就会出现部分可访问、稳定性差的现象。 - 80端口逻辑冗余:80端口server块同时配置了if跳转规则和末尾的
return 404,属于无效冗余配置,且Nginx官方不推荐在server块使用if做跳转,易出现不可预期的逻辑异常。
修复步骤:
- 调整443端口server块配置,拆分根域名和www子域名的匹配逻辑,删除重复的根域名443规则:
# 根域名443服务块,处理实际站点请求 server { listen 443 ssl; listen [::]:443 ssl; server_name sozcafe.de; root /var/www/html; index index.php; ssl_certificate /etc/letsencrypt/live/sozcafe.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/sozcafe.de/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/(forum/|chat/|cms/|wcf/|calendar/|filebase/|blog/|gallery/)?([^.]+)$ /$1index.php?$2 last; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } } # www子域名443跳转块,仅匹配www.sozcafe.de server { listen [::]:443 ssl ipv6only=on; listen 443 ssl; server_name www.sozcafe.de; ssl_certificate /etc/letsencrypt/live/sozcafe.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/sozcafe.de/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; return 301 https://sozcafe.de$request_uri; }
- 替换80端口配置为无if的简洁跳转规则:
server { listen 80; listen [::]:80; server_name sozcafe.de www.sozcafe.de; return 301 https://$host$request_uri; }
- 校验证书覆盖域名,执行以下命令查看当前证书包含的所有域名:
openssl x509 -in /etc/letsencrypt/live/sozcafe.de/fullchain.pem -text -noout | grep DNS
如果输出中没有www.sozcafe.de,执行Certbot命令更新证书,同时覆盖根域名和www子域名:certbot certonly --nginx -d sozcafe.de -d www.sozcafe.de - 所有修改完成后,先执行
nginx -t校验配置语法是否合法,确认返回success后执行systemctl reload nginx重载配置生效。
内容的提问来源于stack exchange,提问作者CoffeeCatDE
相关产品推荐
相关产品推荐

