无法通过uwsgi将Flask模块链接到nginx

时间:2014-05-09 17:10:14

标签: python nginx flask uwsgi

我确定我在这里错过了一些简单的东西。我可以通过nginx获得python / flask脚本的PART,但重要的部分不起作用。这是我的python:

#!/usr/bin/python
import flask
from flask import Flask, jsonify, render_template, request
import os

app = flask.Flask(__name__)
app.config['SERVER_NAME']='localhost'


@app.route("/stuff")
def index():
    return render_template('index.html')

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

def application(environ, start_response):

    start_response("200 OK", [("Content-Type", "text/plain")])
    return ["Hello World!"]

这是我的uwsgi启动:

 sudo -u www-data uwsgi -s /tmp/myApp.sock --module MyApp 

套接字已正确链接并可供nginx使用 这是我的nginx配置片段:

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

当我去myserver / test时,我得到了#34; Hello World!"就像我期望的那样。但是当我去myserver / test / stuff时,我也得到了#Hello; Hello World!"而不是我的index.html的内容(这是有效的,我在其他地方使用它)。如果我输入myserver / test / garbage.html,我会得到一个通用的nginx 404,而不是我的自定义的。

有人能指出我的方向吗?

由于

- 编辑 -

感谢您的回答,它确实有所帮助,但并未解决我的整个问题 添加" - 可调用应用"到我的uwsgi启动行DOES将uwsgi服务器链接到nginx。呀!我可以通过nginx返回我自定义的404文件确认这一点。

但那404是我能得到的。我无法访问我的index.html,它与404.html位于同一目录中,具有相同的所有者和相同的权限。这几乎是同一个文件,文字略有不同。

这可能是期望的问题。我期待在http://(myserver)/test/stuff找到我的index.html但是我得到了404.

我在寻找错误的地方吗?或者我的烧瓶,uwsgi或nginx中有什么东西? 感谢

1 个答案:

答案 0 :(得分:1)

你的应用程序功能不会调用你的烧瓶应用程序,这就是为什么每条路线都返回“Hello World”,200。我很确定你有两个简单的选择。

首先是删除应用程序功能并将其替换为application = app

第二种方法是将uwsgi线改为

sudo -u www-data uwsgi -s /tmp/myApp.sock --module MyApp --callable app

无论如何都会使你的应用程序功能无关紧要。

您可以阅读有关使用uwsgi here的更多信息。

修改

就我对nginx的了解而言,你的nginx配置看起来应该是这样的

location = /test { rewrite ^ /test/; }
location /test { try_files $uri @test; }
location @test {
  include uwsgi_params;
  uwsgi_param SCRIPT_NAME /test;
  uwsgi_modifier1 30;
  uwsgi_pass unix:/tmp/myApp.sock;
}

与上面链接的uwsgi页面上推荐的相同。您似乎没有在根URL上运行,因此基本配置将无法运行。