在nginx + uwsgi下烧瓶

时间:2012-11-24 16:03:34

标签: python nginx flask uwsgi

我们正在开发一个烧瓶应用程序但是在尝试配置服务器4小时后我无法理解它。

这就是事情:

  • vm可通过xx.xx.xx.xx访问:81

  • 在这台服务器上,我的应用程序位于:/var/hg/repositories/data/test.py

我想通过xx.xx.xx.xx:81 / ws

访问此应用程序

这就是我对nginx的所作所为:

 location = /var/hg/repositories/data { rewrite ^ /var/hg/repositories/data/; }
     location /ws { try_files $uri @ws; }
     location @ws {
        include uwsgi_params;
        uwsgi_param SCRIPT_NAME /var/hg/repositories/data;
        uwsgi_modifier1 30;
        uwsgi_pass unix:/tmp/uwsgi.sock;
     }

我有一个yaml文件来午餐uwsgi:

uwsgi:
  socket: 127.0.0.1:9090
  master: 1
  workers: 1
  chmod-socket: 666
  auto-procname: 1
  python-path: .
  pidfile: /tmp/uwsgi.pid
  daemonize: /var/log/uwsgi.log
  module: test:app

转到xx.xx.xx.xx:81为我提供了经典的nginx欢迎消息。

转到xx.xx.xx.xx:81 / ws给了我一个404。

我做错了什么?

在更新后,我有

    location = /var/hg/repositories/data/
    location /var/hg/repositories/data/ { try_files $uri @web }
    location @ws {
             uwsgi_pass unix:/tmp/uwsgi.sock;
    }

我的uwsgi conf:

uwsgi:
  socket: unix:/tmp/uwsgi.lock
  master: 1
  workers: 1
  chmod-socket: 666
  auto-procname: 1
  pidfile: /tmp/uwsgi.pid
  deamonize: /var/log/uwsgi.log
  manage-script-name: true
  mount: /ws=/var/hg/repositories/data/test.py
  callable: app

1 个答案:

答案 0 :(得分:2)

您必须在uWSGI中“装载”该应用,目前您已将其“挂载”为空SCRIPT_NAME

mount:/ws=test.py

callable:app

(删除'module'指令)就可以了。

我建议你避免使用nginx来管理SCRIPT_NAME,因为它不太聪明,使用modifier1 30实际上是一个丑陋的黑客。

从nginx中删除uwsgi_param和uwsgi_modifier1,并在uWSGI中添加manage-script-name:true