如何设置 nginx + tornado + flask?

How to setup nginx + tornado + flask?

这些是我完全可用的 tornado 和 flask 文件:

龙卷风:

from flaskk import app
from tornado.wsgi import WSGIContainer
from tornado.ioloop import IOLoop
from tornado.web import FallbackHandler, RequestHandler, Application

class MainHandler(RequestHandler):
  def get(self):
    self.write("This message comes from Tornado ^_^")

tr = WSGIContainer(app)

application = Application([
    (r"/tornado", MainHandler),
    (r".*", FallbackHandler, dict(fallback=tr)),
])

if __name__ == '__main__':
    application.listen(5052)
    IOLoop.instance().start()

烧瓶:

from flask import Flask, jsonify
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class Report(Resource):
    def get(self):
        return 'hello from flask'

api.add_resource(Report, '/report')

现在我正在尝试在 tornado 之前设置 nginx。
我的 nginx 配置文件是:

worker_processes 3;

error_log  logs/error.;

events {
    worker_connections 1024;
}

http {
    # Enumerate all the Tornado servers here
    upstream frontends {
        server 127.0.0.1:5052;
    }

    include mime.types;
    default_type application/octet-stream;

    keepalive_timeout 65;

    sendfile on;


    server {
        listen 5050;
        server_name  localhost;

        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://localhost:5050;
        }
    }
}

当我做

localhost:5050/

然后我得到了 nginx 欢迎页面。但是当我做

localhost:5050/report

然后我得到一个 404。Tornado 运行 在端口 5052 上。
为什么 nginx 不调用龙卷风从而应该从烧瓶中得到结果?

我是不是漏掉了什么?

首先,你不想代理到 localhost:5050 因为那是 Nginx 本身

您想代理到 upstream frontends

proxy_pass http://frontends;

关于您的 Flask 问题,我已经解决了这个问题。

@app.route('/report')
def report():
    return 'hello from flask'

$ curl localhost:5052/report
hello from flask

当我在 Flask Restful 中添加时,它仍然有效。


你说你看到的是nginx的索引页,所以是运行,你只需要将其他端口正确hook在一起即可。

proxy_pass 修复似乎对我有用。

$ curl localhost:5050/report
"hello from flask"
$ curl localhost:5050/tornado
This message comes from Tornado ^_^