Проблемы с настройкой Flask + uWSGI + Nginx + Fedora 20
Я пытаюсь развернуть приложение фляги через uWSGI на Nginx, с Fedora 20 в качестве ОС, и у меня возникают некоторые проблемы.
У меня есть следующие файлы конфигурации:
NGINX - Конфигурация по умолчанию со следующим редактированием:
location / { try_files $uri @yourapplication; }
location @yourapplication {
include uwsgi_params;
uwsgi_pass unix:/tmp/sjudson_app_uswgi.sock;
}
uWSGI:
[uwsgi]
socket = /tmp/%n.sock
wsgi-file = sjudson_app/sjudson_app.py
callable = sjudson
master = true
chmod-socket = 666
logto = /home/server/logs/uwsgi.log
Прежде всего, когда я пытаюсь бежать:
uwsgi --ini sjudson_app_uwsgi.ini
Я просто получаю:
[uWSGI] getting INI configuration from sjudson_app_uwsgi.ini
Indefinetely. Во-вторых, когда я запускаю его прямо из командной строки:
uwsgi --socket /tmp/sjudson_app_uwsgi.sock --wsgi-file sjudson_app/sjudson_app.py --callable sjudson --master --chmod-socket=666
Я получил:
*** Starting uWSGI 2.0.3 (32bit) on [Tue Mar 25 17:58:44 2014] ***
compiled with version: 4.8.2 20131212 (Red Hat 4.8.2-7) on 25 March 2014 16:48:01
os: Linux-3.13.6-200.fc20.i686+PAE #1 SMP Fri Mar 7 17:17:53 UTC 2014
nodename: new-host-6
machine: i686
clock source: unix
detected number of CPU cores: 2
current working directory: /home/server
detected binary path: /usr/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
your processes number limit is 1024
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /tmp/sjudson_app_uwsgi.sock fd 3
Python version: 2.7.5 (default, Feb 19 2014, 13:47:40) [GCC 4.8.2 20131212 (Red Hat 4.8.2-7)]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x881cc40
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 127952 bytes (124 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x881cc40 pid: 1131 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1131)
spawned uWSGI worker 1 (pid: 1136, cores: 1)
Но когда я пытаюсь подключиться к серверу, я получаю ошибку 502. Я обратил внимание на это сообщение о переполнении стека: Flask, nginx и uwsgi с похожей проблемой, для которой ответ с поправкой касался неверных разрешений на сокеты. Однако у меня есть аргумент chmod-socket=666, и я смотрю на /tmp:
srw-rw-rw-. 1 server server 0 Mar 25 17:53 sjudson_app_uwsgi.sock
Так что мне не кажется, что это проблема.
РЕДАКТИРОВАТЬ:
Понял, я забыл включить сообщение об ошибке Nginx:
2014/03/26 07:58:38 [crit] 792#0: *15 connect() to unix:/tmp/sjudson_app_uswgi.sock
failed (2: No such file or directory) while connecting to upstream, client:
173.79.242.54, server: localhost, request: "GET / HTTP/1.1", upstream:
"uwsgi://unix:/tmp/sjudson_app_uswgi.sock:", host: "173.79.242.54"
Я не уверен, что в данном случае означает "нет такого файла или каталога". Я знаю, что файл.sock существует, так что он пытается найти?
2 ответа
У меня была почти та же самая установка и то же самое сообщение об ошибке. Чтобы это исправить я должен был сделать:
изменить оператор сокета в моем
uwsgi.ini
подать в:socket = 127.0.0.1:8081
добавить следующее в мой
nginx.conf
файл (вне оператора сервера):upstream uwsgi { server 127.0.0.1:8081; }
изменить утверждение местоположения в моем
nginx.conf
подать в:location / { try_files $uri @uwsgi; } location @uwsgi { include uwsgi_params; uwsgi_pass uwsgi; }
Это тогда позволило nginx и uwsgi общаться. Эти инструкции были взяты из http://blog.djcentric.com/setting-up-uswgi-nginx-what-you-need-to-know/.
Пожалуйста, измените строку в конфигурации nginx, с
uwsgi_pass unix:/tmp/sjudson_app_uswgi.sock;
в
uwsgi_pass unix:///tmp/sjudson_app_uswgi.sock;