我确定我在这里错过了一些简单的东西。我可以通过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.
答案 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上运行,因此基本配置将无法运行。