我想请教以下 Nginx 配置,以便将诸如 的 URLhttps://www.mywebsite.com
重写为https://mywebsite.com
。我目前使用以下配置:
server {
server_name www.mywebsite.com;
return 301 $scheme://mywebsite.com$request_uri;
}
server {
listen 80;
server_name mywebsite.com;
# Some more settings...
}
server {
listen 443 ssl;
server_name mywebsite.com;
ssl_certificate path_to_ssl_certificate;
ssl_certificate_key path_to_ssl_certificate_key;
# Some more settings...
}
以防万一,我使用的证书是通配符 SSL 证书,该证书是在服务器本身(Ubuntu 12.04)上使用 OpenSSL 自签名的。发生的事情是www.mywebsite.com
正确重定向到mywebsite.com
,但https://www.mywebsite.com
才不是重定向到https://www.mywebsite.com
(即,www
在浏览器中查看页面时仍显示)。我可能做错了什么?
答案1
解决方案是将第一个服务器块修复如下:
server {
listen 80;
listen 443;
server_name www.mywebsite.com;
return 301 $scheme://mywebsite.com$request_uri;
}
例如,您忘记在 SSL 端口上捕获 www.mywebsite.com 连接,仅此而已。顺便说一句,这是从站点名称中删除 www 的最佳方法,不错的选择。
答案2
您的重定向发生在仅监听端口 80 的虚拟主机中。要重定向通过 SSL 传入的请求,您需要一个使用 SSL 监听端口 443 的虚拟主机。除非您的浏览器都支持信噪比,您只能拥有一个 SSL 虚拟主机,因此该规则需要进入您现有的 SSLserver
块。
if ($host = www.mywebsite.com) {
rewrite ^ https://mywebsite.com$request_uri? permanent;
}