Nginx-从 HTTPS 中删除 WWW

Nginx-从 HTTPS 中删除 WWW

我想请教以下 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;
}

相关内容