【发布时间】:2017-10-10 13:02:22
【问题描述】:
我想将请求从我的 www.mydomain.com/subdirectory 重定向到相应的 Tornado 服务器,如下所示:
www.example.com/app1 -> http://10.0.0.5:8082;
www.example.com/app2 -> http://10.0.0.6:8082;
www.example.com/app3 -> http://10.0.0.7:8082;
我有这个 nginx 配置:
location ^~ /app1 {
proxy_pass http://10.0.0.5:8082/;
}
location ^~ /app2 {
proxy_pass http://10.0.0.6:8082/;
}
location ^~ /app3 {
proxy_pass http://10.0.0.7:8082/;
}
我的 Tornado 应用:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("main.html")
class HomeHandler(tornado.web.RequestHandler):
def get(self):
self.render("home.html")
class UserHandler(tornado.web.RequestHandler):
def get(self, user_id):
self.render("user.html")
class UserStatusHandler(tornado.web.RequestHandler):
def get(self, user_id):
self.render("user_status.html")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
(r"/home", HomeHandler),
(r"/user/([0-9]*)", UserHandler),
(r"/user/([0-9]*)/status", UserStatusHandler),
'''
my app have a lot of other pages with subpaths
'''
])
if __name__ == "__main__":
app = make_app()
app.listen(8082)
tornado.ioloop.IOLoop.current().start()
所以,当命中时:
http://www.example.com/app1 -> it works, main.html is rendered
http://www.example.com/app1/ -> Tornado throws an warning: WARNING:tornado.access:404 GET // (10.0.0.5) 0.41ms
http://www.example.com/app1/home -> Tornado throws an warning: WARNING:tornado.access:404 GET //home (10.0.0.5) 0.41ms
http://www.example.com/app1/home/ -> Tornado throws an warning: WARNING:tornado.access:404 GET //home/ (10.0.0.5) 0.41ms
http://www.example.com/app1/user/1 -> Tornado throws an warning: WARNING:tornado.access:404 GET //user/1 (10.0.0.5) 0.41ms
http://www.example.com/app1/user/1/status -> Tornado throws an warning: WARNING:tornado.access:404 GET //user/1/status (10.0.0.5) 0.41ms
url 上的额外 / 导致错误
请问,有人可以帮帮我吗?
【问题讨论】:
-
太好了!它有效。
标签: python redirect nginx proxy tornado