Nginx:将非www重定向到www https

Posted

技术标签:

【中文标题】Nginx:将非www重定向到www https【英文标题】:Nginx: Redirect non-www to www https 【发布时间】:2017-07-02 20:43:02 【问题描述】:

我有下面的 nginx 配置,我正在尝试将所有内容重定向到 https://www,无论出现什么,例如 http://example.com、http://www.example.com 或 https://example.com。

我查看了许多关于 SO 的主题并尝试了几件事,但仍然感到困惑,我永远无法让 https://example.com 重定向到 https://www 模式!?

server 
    listen          80;
    listen          443 ssl;
    server_name     example.com;
    return          301 https://www.example.com$request_uri;


server 
    listen       443 ssl;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    ssl_dhparam /etc/nginx/ssl/dhparams.pem;
    ssl_session_timeout 30m;
    ssl_session_cache shared:SSL:10m;
    ssl_buffer_size 8k;
    add_header Strict-Transport-Security max-age=31536000;

    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / 
    

    error_page 404 /404.html;
        location = /40x.html 
    

    error_page 500 502 503 504 /50x.html;
        location = /50x.html 
    

【问题讨论】:

【参考方案1】:

让一个server 阻止默认服务器,并让另一个server 阻止一个真正的server_name

server 
    listen  80 default_server;
    listen  443 ssl default_server;

    ssl_certificate ...;
    ssl_certificate_key ...;
    return  301 https://www.example.com$request_uri;


server 
    listen  443 ssl;
    server_name www.example.com;

    ssl_certificate ...;
    ssl_certificate_key ...;
    ...

https 的默认服务器需要有效的证书。假设您有一个通配符证书 - 大多数 ssl_ 语句可以移动到外部块并由两个服务器块继承。例如:

ssl_certificate ...;
ssl_certificate_key ...;
ssl_...;

server 
    listen  80 default_server;
    listen  443 ssl default_server;
    return  301 https://www.example.com$request_uri;


server 
    listen  443 ssl;
    server_name www.example.com;
    ...

请参阅this document 了解更多信息。

【讨论】:

以上是关于Nginx:将非www重定向到www https的主要内容,如果未能解决你的问题,请参考以下文章

Nginx:在 https 上将非 www 重定向到 www

Docker + Gunicorn + Nginx + Django:将非 www 重定向到 AWS Route 53 上的 www

将非 WWW 重定向到 WWW 格式并重定向到 VirtualHost 中的 HTTPS

将非 www 重定向到 www 以获取 https

301将非www重定向到www

也将非 www 重定向到 www 子页面