python - Flask + uWSGI + Nginx + Fedora 20 设置问题

标签 python nginx flask uwsgi fedora20

我正在尝试通过 uWSGI 将 Flask 应用程序部署到 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

不确定。其次,当我直接从命令行运行它时:

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 错误。我注意到这个 stackoverflow 帖子:Flask, nginx, and 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 文件存在,那么它在努力寻找什么?

最佳答案

我有几乎完全相同的设置和相同的错误消息。要修复它,我必须这样做:

  • 将我的 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/ .

关于python - Flask + uWSGI + Nginx + Fedora 20 设置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22647250/

相关文章:

生产模式下的 Flask 会忽略 @app.errorhandler

python - 如何过滤掉嵌套列表中的条件逻辑元素

无法从代理获取 QUERY_STRING 到应用程序

ubuntu - 如何使用服务器 IP 地址完全禁用对 nginx 的访问?

nginx - 两层 NGINX 反向代理,第二层带有 ssl_client_verify

python - 将查询参数传递给 Flask 装饰器

python - 在 python 中执行 bash 脚本

python - Django:按从 ModelForm 中排除的字段进行验证

python - 在 Python 中从 Word 文档 (.docx) 中提取突出显示的单词

python - 每个 Flask session 存储大数据或服务连接