NGINX配置HTTPS重定向:www.example.ch跳转至example.ch报400错误
问题分析与解决方法
你的问题核心是**www.example.ch的HTTPS请求没有对应的SSL配置**:当前第三个server块仅处理80端口的HTTP请求,当用户访问https://www.example.ch时,Nginx找不到匹配的443端口监听规则,要么匹配到example.ch的server块但证书域名不匹配,导致SSL握手失败返回400错误;要么无默认server直接拒绝连接。
修复步骤
1. 确认SSL证书包含www.example.ch
先检查你的Let's Encrypt证书是否将www.example.ch作为SAN(备用域名)。如果没有,重新申请包含双域名的证书:
certbot certonly --nginx -d example.ch -d www.example.ch
2. 修改Nginx配置,为www.example.ch添加HTTPS监听
把第三个server块修改为同时处理80和443端口请求,并配置SSL证书:
server { server_name www.example.ch; # 处理HTTP请求,重定向到HTTPS主域名 listen 80; return 301 https://example.ch$request_uri; # 处理HTTPS请求,重定向到主域名 listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.ch/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.ch/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; return 301 https://example.ch$request_uri; }
也可以拆分成两个独立server块,分别处理不同端口:
# 处理www的HTTP请求 server { server_name www.example.ch; listen 80; return 301 https://example.ch$request_uri; } # 处理www的HTTPS请求 server { server_name www.example.ch; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.ch/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.ch/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; return 301 https://example.ch$request_uri; }
3. 验证配置并重启Nginx
修改后先检查配置合法性:
nginx -t
确认无错误后重启Nginx:
systemctl restart nginx
完成后,无论用户访问http://www.example.ch还是https://www.example.ch,都会正确重定向到https://example.ch,且不会出现SSL相关的400错误。
内容的提问来源于stack exchange,提问作者FLYAX
相关产品推荐
相关产品推荐

