欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Tornado服务器中绑定域名、虚拟主机的方法

程序员文章站 2024-01-27 14:33:28
tornado默认是监听ip加端口形式,由于tornado在国内用的人极少,资料更是鳞毛凤角。下面说说tornado如何绑定域名。 默认tornado的hello wor...

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

默认tornado的hello word是这么来的

复制代码 代码如下:

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端口

Tornado服务器中绑定域名、虚拟主机的方法

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

Tornado服务器中绑定域名、虚拟主机的方法

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

Tornado服务器中绑定域名、虚拟主机的方法

既然这样,那我们就可以使用域名绑定的方式来运行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访问结果

Tornado服务器中绑定域名、虚拟主机的方法

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

复制代码 代码如下:

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

执行结果

Tornado服务器中绑定域名、虚拟主机的方法

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