Назад | Перейти на главную страницу

https www не может перенаправить на не-www https nginx

Я не могу перенаправить свой https://www к https:// Как сейчас сайт думает, что www. это совершенно отдельный сайт. Я хочу правильно перенаправить, но когда я добавляю конфигурацию того, что считаю правильным, я получаю бесконечное перенаправление. Www без https перенаправляет правильно. Единственная проблема 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.

Я предполагаю, что ваш сертификат 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;
}

Для простого 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 мы можем полностью избежать вычисления регулярного выражения.