[英]Unable to link Flask module to nginx through 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時,我會看到“ Hello World!”。 就像我期望的那樣。 但是當我訪問myserver / test / stuff時,我也得到了“ Hello World!”。 而不是index.html的內容(這是有效的,我在其他地方使用它)。 如果輸入myserver / test / garbage.html,則會得到一個通用的nginx 404,而不是我的自定義代碼。
誰能指出我的方向?
謝謝
- 編輯 -
謝謝您的回答,它確實有幫助,但不能解決我的整個問題。
在我的uwsgi啟動行中添加“ --callable app”,會將uwsgi服務器鏈接到nginx。 呀! 我可以通過nginx返回我的自定義404文件來確認這一點。
但是那404是我所能得到的。 我無法訪問與404.html位於同一目錄中的index.html,它具有相同的所有者和相同的權限。 它實際上是幾乎相同的文件,但文本略有不同。
這可能是期望的問題。 我希望在http://(myserver)/test/stuff
上找到我的index.html,但是我得到了404。
我看錯地方了嗎? 或者我的燒瓶,uwsgi或nginx中是否有東西掉? 謝謝
您的應用程序功能不會調用flask應用程序,這就是為什么每條路線都返回200的“ Hello World”的原因。我很確定您有兩個簡單的選擇。
首先是刪除應用程序功能,並將其替換為application = app
。
第二個是將uwsgi行更改為
sudo -u www-data uwsgi -s /tmp/myApp.sock --module MyApp --callable app
無論如何,這會使您的應用程序功能不相關。
您可以在此處閱讀有關使用uwsgi的更多信息。
編輯
據我對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上運行,因此基本配置將無法運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.