@maksam07

Docker, Django, Nginx, Gunicorn, иногда отображается ошибка 502 Bad gateway, как исправить?

Доброй ночи. Сделал деплой проекта, исправил пару ошибок, которые не обнаружил локально, получил сертификат ssl, все относительно нормально стало, только вот стал замечать, что через 1-5 перезагрузок сайта у меня выпадает страница с ошибкой 502 (сервер стоит за cloudflare)
Очень много сайтов облазил по инфе, более 30 ссылок с разными вариантами исправления проблемы, но ничего не помогло, все так же само, то грузится страница, то ошибка.

В связи с тем, что даже не могу понять куда копать, исходные файлы выкладывать изначально не буду, скажите какие нужно предоставить - опубликую. Прошу помочь, кто сталкивался и решал проблему. Не понимаю, почему ИНОГДА ошибка вылазит. Если бы всегда вылазила, то возможно решить было бы проще.

nginx.conf:
Последняя опробованная версия
upstream hello_server {
    server web:8000;
}

server {
    listen 443 ssl;
    listen [::]:443;
    listen 80;
    listen [::]:80;

    charset utf-8;

    #ssl on;
    ssl_certificate /etc/nginx/certs/default.crt;
    ssl_certificate_key /etc/nginx/certs/default.key;

    #error_page 497 https://$host:$server_port$request_uri;

    location / {
        proxy_pass http://hello_server;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;

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

    location /staticfiles/ {
        alias /usr/src/app/staticfiles/;
    }

    location /mediafiles/ {
        alias /usr/src/app/mediafiles/;
    }
}
Второй опробованный конфиг
server {
    listen 443 ssl;
    listen [::]:443;
    listen 80;
    listen [::]:80;

    charset utf-8;

    #ssl on;
    ssl_certificate /etc/nginx/certs/default.crt;
    ssl_certificate_key /etc/nginx/certs/default.key;

    #error_page 497 https://$host:$server_port$request_uri;

    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;
    }

    location /staticfiles/ {
        alias /usr/src/app/staticfiles/;
    }

    location /mediafiles/ {
        alias /usr/src/app/mediafiles/;
    }
}


UPD
Честно, не знаю что произошло. Удалил все контейнеры, все почистил. На локальной машине сделал небольшие изменения, проверил все еще раз - локально никакого нового поведения, и дев и прод версия сайта загрудаются отлично. Обратно все залил на сервер, настроил переменные, запустил ииии.... все ок. Я продолжу наблюдать за ситуацией и если столкнусь с проблемой еще раз и пойму из-за чего это - обновлю вопросы. Решения так и нет.
Из интересного в прошлом:
При обновлении страницы сайта в лог сыпалась строка от контейнера в БД: LOG: invalid length of startup packet
Начал исследовать этот момент и обнаружил, что при запуске контейнера во время инициализации БД тоже была какая-то информация, связанная с пакетами (к сожалению не скопировал, чтобы сюда вставить)
Наткнулся на пост: https://github.com/benoitc/gunicorn/issues/2347#is...
В нем говорится, что с этой ошибкой сайт иногда может выдавать страницу 502. Решение я не пробовал, т.к. оно мне не понравилось.
Из интересного в настоящем:
Больше ошибки LOG: invalid length of startup packet при новой настройке группы контейнеров НЕ наблюдал. Почему ошибка пропала - неизвестно. Хотя я много всего делал с БД, и другие подключения, и другие версии, но в прошлом это никак не исправляло проблему
  • Вопрос задан
  • 511 просмотров
Пригласить эксперта
Ответы на вопрос 3
nutkatuz
@nutkatuz
вот в первом конфиге уходит в if (!-f $request_filename) {...} иногда. и вызывает ошибку. это надо на что-то заменить, на что - не знаю. вот удали - и не будет ошибок с таймаутами, проверь
Ответ написан
@mureevms
У вас web:8000 перестает отвечать. Смотрите на него, может он падает. Ну и логи смотрите. Вангую, что там будет сообщение типа, что web:8000 недоступен.
Ответ написан
@vacya01
Я столкнулся с такой же проблемой. Тоже сначала не мог понять, в чём дело. Потом обнаружил, что на моей машине /etc/interfaces пуст. Возможно, у вас тоже что-то с системными настройками сети
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы