Nginx www перенаправляет на не-www, браузер говорит, что ваше соединение с этим сайтом небезопасно, Django

Я не могу подключиться к своему сайту с помощью www.example.com, он говорит "не безопасно" только https://example.com работает.

Сначала я не установил DNS A запись для www для перенаправления на ip моего сервера, поэтому www.example.com не работал, но как только я добавил www A запись, теперь он показывает Not Secure с красной линией https через него, когда я перехожу на www.example.com.

Вот мой myapp.conf из nginx sites-available:

upstream myapp_app_server {
    server unix:/apps/myapp/myapp_env/run/gunicorn.sock fail_timeout=0;
}


server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com-0001/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com-0001/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    client_max_body_size 4G;

    access_log /etc/nginx/logs/nginx-access-prod.log;
    error_log /etc/nginx/logs/nginx-error-prod.log;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        alias /var/www/html/myapp/static/;

    }

    location /media/ {
    alias /var/www/html/myapp/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://myapp_app_server;
            break;
        }

        if ( $host !~* ^(example.com|www.example.com)$ ) {
            return 444;
        }
    }
}

Вот мой nginx.conf из etc/nginx:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
}

http {
        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;


        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;


        gzip on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

Когда я ввожу команду:

curl -I http://example.com/

Я получаю вывод:

HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0
Date: Fri, 18 Mar 2022 03:43:51 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://example.com/

Я также использую django и вот мои настройки безопасности в settings.py:

SESSION_COOKIE_HTTPONLY = True
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
X_FRAME_OPTIONS = "DENY"
SECURE_HSTS_SECONDS = 3600 
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True 
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True

Я прослушал несколько уроков на youtube и в блоге, а также другие сообщения на stackoverflow, я пробовал и return 301 https://$server_name$request_uri;, и return 301 https://example.com$request_uri; вместе с sudo systemctl start nginx Я просто не могу заставить www.example.com перенаправить на https://example.com.

Также я продолжал получать письма о недопустимом заголовке HTTP_HOST от ботов с GET-запросами. Это было исправлено, когда я добавил:

if ( $host !~* ^(example.com|www.example.com)$ ) {
    return 444;
}

Однако я переустановил Certbot и получил новый сертификат, чтобы начать все сначала, но после этого я стал получать письма с недопустимым заголовком HTTP_HOST от django из-за сканирующих ботов. Certbot внес автоматические изменения в мои файлы nginx .conf, однако я думал, что получил блок возврата 444 таким, каким он был. Я использовал sudo certbot --nginx для установки сертификатов. Https всегда подключался нормально и сейчас подключается нормально.

Вернуться на верх