如何设置nginx +龙卷风+烧瓶?

时间:2017-03-11 20:46:02

标签: python nginx flask tornado

这些是我完全正常工作的龙卷风和烧瓶文件:

龙卷风:

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')

现在我试图在龙卷风面前设置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;
        }
    }
}

我做的时候

  

本地主机:5050 /

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

  

本地主机:5050 /报告

然后我得到了404.龙卷风在5052端口上运行 为什么nginx不会调用龙卷风从而从烧瓶中得到结果?

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:2)

首先,您不想代理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的索引页面,所以它正在运行,你只需要正确地将其他端口挂钩在一起。

proxy_pass修复似乎对我有用。

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