簡體   English   中英

無法通過uwsgi將Flask模塊鏈接到Nginx

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM