Веб-приложение с использованием gunicorn на сервере nginx не работает
У меня было 3 приложения на сервере, работающем на Ubuntu 22.04. Первое приложение было Django, второе - Flask appp в одном месте и третье - FastAPI в другом месте. Когда я попытался добавить четвертое приложение (Flask), я не знаю, что я напутал, но теперь ни одно из них не работает. Все приложения отлично работают на моем компьютере.
Когда я пытаюсь зайти на страницу через браузер на компьютере, он возвращает ERR_CONNECTION_REFUSED
, а при доступе через телефон - ошибку 502 Bad Gateway nginx/1.18.0 (Ubuntu)
. Первая ошибка ничего не записывает в журнал nginx'а error.log
, а вторая записывает.
Мой текущий конфиг сервера выглядит следующим образом:
server {
server_name host.es www.host.es;
location ~ /\.ht { deny all; }
location ~/\.git { deny all; }
location = /favicon.ico { access_log off; log_not_found off; }
location /media { alias /var/www/host.es/myapp/media; }
location /static { alias /var/www/host.es/myapp/static; }
location / {
include proxy_params;
proxy_pass http://unix:/run/myapp.sock;
}
# The next configuration applies to the 3 location apps
location /location1 {
include porxy_params;
proxy_set_header SCRIPT_NAME /location1;
proxy_pass https://unix:/run/mysecondapp.sock;
}
}
server {
if ($host = www.host.es) {
return 301 https://$host$request_uri;
}
if ($host =host.es) {
return 301 https://$host$request_uri;
}
listen 80;
server_name onemade.es www.onemade.es;
return 404;
}
Мой сервис Django, который является основным приложением, выглядит следующим образом:
[Unit]
Description=Gunicorn for app
Requires=myapp.sock
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/myapp
ExecStart=/path/to/myapp/env/bin/gunicorn --workers 3 --preload --bind unix:/run/myapp.sock myapp.wsgi:application
[Install]
WantedBy=multi-user.target
Мои сервисы Flask, которые находятся в локациях, выглядят следующим образом:
[Unit]
Description=Gunicorn for app
Requires=mysecondapp.sock
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/mysecondapp
ExecStart=/path/to/mysecondapp/env/bin/gunicorn --workers 3 --preload --bind unix:/run/mysecondapp.sock web.wsgi:app
[Install]
WantedBy=multi-user.target
Все сокеты имеют одинаковую конфигурацию
[Unit]
Description=My apps socket
[Socket]
ListenStream=/run/myapp.sock
SocketUser=www-data
[Install]
WantedBy=sockets.target
И оба файла .socket
и .service
принадлежат пользователю root
и хранятся в /etc/systemd/system/
Файлы .sock
находятся в /run/
и принадлежат www-data
.
При выполнении приведенных ниже команд для всех служб и сокетов они активны и не содержат никаких ошибок, и то же самое с nginx.
sudo systemctl start
sudo systemctl enable
sudo systemctl status
По команде sudo journalctl
все работает нормально. При проверке /var/log/nginx/access.log
выдается ошибка 502 при попытке GET
перейти на страницу. При проверке /var/log/nginx/error.log
выдается следующая строка:
connect() to unix:/bin/myapp.sock failed (2: No such file or directory) while connecting to upstream
В ошибке похоже, что nginx ищет файл .sock
в каталоге /bin
, а не в каталоге /run
. Я не понимаю, почему это происходит и почему это изменилось при попытке добавить новое приложение. Как это исправить, чтобы все приложения работали нормально?