https www 无法重定向到非 www https nginx

https www 无法重定向到非 www https nginx

我似乎无法将我的重定向https://wwwhttps://目前该网站认为www. 是一个完全独立的网站。我想正确重定向,但当我添加我认为正确的配置时,我得到了无限重定向。非 https www 重定向正确。唯一的问题是https://www.

这是我的 nginx 配置,也许我只是遗漏了一些东西。我删除了https://www重定向,因为我似乎无法正确完成它。

server {
    listen 192.168.0.123:80;
    server_name www.site.com site.com;

    location /rss/main/ {
            uwsgi_pass unix:///tmp/site.com.sock;
            include uwsgi_params;
    }

    location / {
            rewrite ^ https://site.com$request_uri permanent;
    }

}
server {
        listen 192.168.0.123:443 ssl;
        server_name site.com;
        access_log /var/log/nginx/site.com_access.log;
        error_log /var/log/nginx/site.com_error.log;

        ssl_certificate /srv/ssl/site_com.crt;
        ssl_certificate_key /srv/ssl/site.com.key;

        location / {
                uwsgi_pass unix:///tmp/site.com.sock;
                include uwsgi_params;
        }

        location /static/ {
                alias /var/www/site.com/static_final/;
        }

        location /media/ {
                alias /var/www/assets/site/;
    }
}

任何帮助都将不胜感激,因为我不想让人们意外访问 www。

答案1

对于简单的 301 重定向,我们可以使用返回指示。

server {
        listen 192.168.0.123:443 ssl;
        server_name www.site.com;

        ssl_certificate /srv/ssl/site_com.crt;
        ssl_certificate_key /srv/ssl/site.com.key;

        return 301 $scheme://site.com$request_uri;
}

这实际上和艾伦的回答是一样的,但是通过使用 return 指令,我们可以完全避免评估正则表达式

答案2

我假设您的 SSL 证书涵盖 www.site.com 和 site.com。以下似乎是处理此问题最合适的方法?

server {
        listen 192.168.0.123:443 ssl;
        server_name www.site.com;

        ssl_certificate /srv/ssl/site_com.crt;
        ssl_certificate_key /srv/ssl/site.com.key;

        rewrite ^ https://site.com$request_uri permanent;
}

相关内容