502 Неисправный шлюз Nginx | Django | Gunicorn на балансировщике нагрузки

У меня есть AWS Elastic Load Balancer (ELB) и прослушиватели, которые перенаправляют на внутренний порт 80 (сертификаты и завершение SSL на ELB). Я запускаю nginx на экземплярах EC2, а также php, gunicorn и django/python. Кластер настраивается для размещения нескольких доменных имен с отдельными веб-сайтами/приложениями для каждого.

Внешние http/https запросы прекрасно работают для html и php, возвращая страницы. Для запросов django с использованием сокетов я получаю внешнюю ошибку шлюза 502 Bad, но внутренне через curl (например, curl --unix-socket /tmp/gunicorn_.sock http:///app/) это работает нормально.
Внешне https:///test (простая конечная точка Nginx) работает нормально

Ни в одном из журналов, которые я могу найти, нет ошибок. например:

[2025-07-31 00:05:07 +0000] [776767] [INFO] Handling signal: term
[2025-07-31 00:05:07 +0000] [776771] [INFO] Worker exiting (pid: 776771)
[2025-07-31 00:05:07 +0000] [776769] [INFO] Worker exiting (pid: 776769)
[2025-07-31 00:05:07 +0000] [776768] [INFO] Worker exiting (pid: 776768)
[2025-07-31 00:05:08 +0000] [778670] [INFO] Starting gunicorn 23.0.0
[2025-07-31 00:05:08 +0000] [778670] [INFO] Listening at: unix:/tmp/gunicorn_<domain>.sock (778670)
[2025-07-31 00:05:08 +0000] [778670] [INFO] Using worker: sync
[2025-07-31 00:05:08 +0000] [778672] [INFO] Booting worker with pid: 778672
[2025-07-31 00:05:08 +0000] [778673] [INFO] Booting worker with pid: 778673
[2025-07-31 00:05:08 +0000] [778674] [INFO] Booting worker with pid: 778674

Конфигурация моего сервера

    server {
        listen 80;
        server_name <domain> www.<domain> localhost;

        root /mnt/efs/www/<domain>;
        index index.php index.html;

        location ~ /app/ {
            error_log /mnt/efs/log/nginx-app-debug.log debug;
            proxy_pass http://unix:/tmp/gunicorn_<domain>.sock/;
            proxy_set_header Host $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;
        }

        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/run/php-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_intercept_errors on;
        }

        location = /test {
            default_type text/plain;
            return 200 "Nginx test";
        }
    }

Мой служебный файл gunicorn

[Unit]
Description=Gunicorn instance for Django app
After=network.target

[Service]
User=ec2-user
Group=ec2-user
WorkingDirectory=/mnt/efs/www-private/<domain>/<ver>
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/tmp/gunicorn_<domain>.sock hello_world.wsgi:application --access-logfile /mnt/efs/log/django_<domain>.log --error-logfile /mnt/efs/log/django_<domain>.log
Restart=always

[Install]
WantedBy=multi-user.target

Другая важная информация:

  • Для SELinux установлено допустимое значение
  • Служба Gunicorn запущена, и для разрешений сокета установлено значение 777 (для тестирования)
  • Во время запуска не сообщалось о пропавших зависимостях

Я рассмотрел все похожие проблемы здесь, но ни одно из перечисленных решений не работает. Буду благодарен за любую помощь!

Для тех, кто смотрит в будущее, ответ @IvanShatsky, приведенный выше, решил проблему. Отключите PrivateTmp, и это сработает


sudo bash -c "cat > /etc/systemd/system/nginx.service.d/override.conf" <<EOF
[Service]
PrivateTmp=false
EOF
Вернуться на верх