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

相關文章
相關標籤/搜索