如何设置 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 ^_^
这些是我完全可用的 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 ^_^