46.tornado绑定域名或者子域名泛域名的处理

Tornado默认是监听IP加端口形式,因为Tornado在国内用的人极少,资料更是鳞毛凤角。下面说说Tornado如何绑定域名。 python

默认Tornado的hello word是这么来的 web


import tornado.ioloop
import tornado.web
 
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")
 
application = tornado.web.Application([
    (r"/", MainHandler),
])
 
if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
运行后,使用浏览器访问IP+8888端口

若是你想支持域名访问,能够用Nginx监听80端口作代理,或者你只有这么一个应用,直接就用Tornado监听80端口免去Nginx这一步,关键是 这么干别人使用IP或者域名都能访问。谷歌了一大堆英文站点也找不到绑定域名教程,反正Tornado源文件也就那一点就翻开看看,里边怎么写?结果看到 这么一段话 浏览器

大喜!不知道为何,这段在文档里是没有的,而后再往下细看,返现默认是有host机制的,而且任何host访问,截图 app

既然这样,那咱们就能够使用域名绑定的方式来运行tornado应用了,并且支持多域名,由于那就是一串正则,在刚才那个例子的基础上加个域名绑定 tornado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
importtornado.ioloop
importtornado.web
 
classMainHandler(tornado.web.RequestHandler):
    defget(self):
        self.write("Hello, world")
 
classDomainHandler(tornado.web.RequestHandler):
    defget(self):
        self.write("Hello, a.com")
 
 
application=tornado.web.Application([
    (r"/", MainHandler),
])
 
application.add_handlers(r"^a\.com$", [
    (r"/", DomainHandler),
])
 
if__name__=="__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

a.com访问结果 oop

甚至也能够支持正则匹配,好比让它也支持www前缀 spa

1
2
3
application.add_handlers(r"^(www\.)?a\.com$", [
    (r"/", DomainHandler),
])

执行结果 代理

结合这个机制,你能够在一个应用上绑定多个域名及子域名泛域名的多站部署。更易于管理! code

相关文章
相关标签/搜索