Tornado绑定域名或者子域名泛域名的处理

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

默认Tornado的hello World是这么来的

【国内直连ChatGPT 29元起】
国内直连ChatGPT,Plus会员每月29元起,支持最新o1模型探索更多领域,无需注册OpenAI账号。

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源文件也就那一点就翻开看看,里边怎么写?结果看到这么一段话

full

大喜!不知道为什么,这段在文档里是没有的,然后再往下细看,发现默认是有host机制的

既然这样,那我们就可以使用域名绑定的方式来运行Tornado应用了,而且支持多域名,因为那就是一串正则,在刚才那个例子的基础上加个域名绑定

import tornado.ioloop
import tornado.web
 
class MainHandler(tornado.web.RequestHandler):
  def get(self):
    self.write("Hello, World")
 
class DomainHandler(tornado.web.RequestHandler):
  def get(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

[root@test01 ~]# curl http://a.com
Hello, a.com

甚至也可以支持正则匹配,比如让它也支持www前缀

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

访问www.a.com

[root@test01 ~]# curl http://www.a.com
Hello, a.com

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

分享

TITLE: Tornado绑定域名或者子域名泛域名的处理

LINK: https://www.qttc.net/327-tornado-bind-domain.html

NOTE: 原创内容,转载请注明出自琼台博客