Ошибка Nginx 400 - клиент отправил обычный HTTP-запрос на HTTPS-порт при чтении заголовков клиентского запроса

Недавно я добавил SSL-сертификат на свой сайт с помощью Let's Encrypt и заметил, что когда я пытаюсь зайти на свой сайт, используя HTTP или HTTPS, сайт загружается правильно большую часть времени, но иногда он возвращает ошибку 400: Bad Request. Обновление страницы после этого обычно возвращает меня на рабочий HTTPS сайт, но мне трудно понять, почему эта ошибка возникает только иногда.

Текущий сайт использует Django, Gunicorn, Nginx и AWS EC2 с балансировщиком нагрузки, а SSL-сертификат предназначен для экземпляра EC2, если это имеет значение.

nginx.conf

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

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

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

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

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

        ##
        # Gzip Settings
        ##

        gzip on;

        ##
        # Virtual Host Configs
        ##

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

Файл .conf с поддержкой сайтов

server {

    listen 80;
    server_name = "";
    return 444;

}

server {

    listen 80;
    server_name sitename;
    return 301 https://$host$request_uri;

}
server {

    listen 443 default ssl;
    server_name sitename;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /opt/code/shop;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }

    ssl_certificate /etc/letsencrypt/live/sitename/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/sitename/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

proxy_params

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $server_name;

Вывод примера журнала ошибок Nginx error.log

2022/12/06 17:41:22 [info] 1996220#1996220: *1047 client sent plain HTTP request to HTTPS port while reading client request headers, client: ip, server: sitename, request: "GET / HTTP/1.1", host: "sitename"
2022/12/06 17:59:42 [info] 1996220#1996220: *1929 client sent invalid method while reading client request line, client: ip, server: sitename, request: "KtIX\YNY"
Вернуться на верх