nginx+uwsgi 找不到 Bottle.py 应用

nginx+uwsgi 找不到 Bottle.py 应用

我有一个 Python 3 bottle.py 应用程序,我将其安装到虚拟环境中(让 pip 自动获取依赖项)。我试图让它在我的 raspberry pi 上的 nginx 和 uwsgi 下运行。

当我运行 nginx 和 uwsgi 时,访问http://localhost/icecrate结果为“uWSGI 错误 Python 应用程序未找到”。我猜想这意味着 nginx 正确连接到 uwsgi,而 uwsgi 找不到该应用程序。

但是,如果我运行该应用程序,uwsgi --http 0.0.0.0:8080 /etc/uwsgi/apps-enabled/icecrate.inihttp://localhost:8080会给我该应用程序,这表明 uwsgi 配置至少是足够的。

我在 Google 和文档中搜索了几个小时以寻找解决方案。我不知道我在这里做错了什么。

/etc/nginx/sites-available/icecrate

server {
  listen      80;
  server_name raspberrypi;

  access_log  /home/icecrate/logs/access.log;
  error_log   /home/icecrate/logs/error.log;

  location /icecrate {
    uwsgi_pass unix:///tmp/icecrate.sock;
    include    uwsgi_params;
  }
}

/etc/uwsgi/apps-available/icecrate.ini

[uwsgi]
vhost = true
plugins = python3
socket = /tmp/icecrate.sock
master = true
enable-threads = false
processes = 1

# this just imports the app callable and renames it to application
wsgi-file = /home/icecrate/nginx.py

# I get the same results using this method
#module = icecrate.web
#callable = app

virtualenv = /home/icecrate/env
touch-reload = /home/icecrate/reload

应用程序代码位于 GitHub

答案1

我最终放弃了尝试和所有配置,重新开始,但我想我已经弄清楚了。我相当确定这是一个权限问题。

默认情况下,nginx.conf 指定www-data为其运行的用户,而之前的尝试没有处理这个问题。所有文件都归我所有。我没有更改默认用户,而是为创建了一个主文件夹www-data,现在它包含 icecrate 虚拟环境。在设置应用程序时,我曾经sudo -s -u www-data创建过所有文件,因此所有文件都有适当的所有者和权限。

Nginx 配置基本相同,只是 virtualenv 文件夹现在充当套接字和日志的主目录:

server {
  listen 80;
  server_name = raspberrypi;

  access_log /home/www-data/icecrate/logs/access.log;
  error_log /home/www-data/icecrate/logs/error.log;

  location /icecrate {
    uwsgi_pass unix:///home/www-data/icecrate/icecrate.sock;
    include uwsgi_params;
  }
}

在重建 uwsgi 应用程序 ini 时,我跳过了一些看起来对问题不重要的内容,但本质上也是一样的:

[uwsgi]
plugins = python3
socket  = /home/www-data/icecrate/icecrate.sock
module  = icecrate.web:app
virtualenv = /home/www-data/icecrate
touch-reload = /home/www-data/icecrate/reload

# like ngnix, uwsgi should be www-data.
uid = www-data
gid = www-data

# don't think this works, though
logto = /home/www-data/icecrate/logs/uwsgi.log

分别将配置文件放入sites-enabled和后apps-enabled,我启动nginxuwsgi并将浏览器指向,http://localhost/icecrate结果出现了 bottle.py 404 错误。我想我这辈子从来没有看到 404 错误这么高兴过。

相关内容