Python中国社区  »  tornado

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

Py站长 • 1 年前 • 740 次点击  

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

http://www.qttc.net/static/upload/2013/13691450693368.jpg

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

image

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

image

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

image

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

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

执行结果

image

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1360
 
740 次点击  
分享到微博
文章 [ 1 ]  |  最新文章 1 年前
BeginMan
Reply   •   1 楼
BeginMan    1 年前

最近一年都在用tornado做项目,感觉确实强大。

分享
社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
Elasticsearch   docker  
WEB开发
linux   Git   zookeeper   MongoDB   bottle   tornado   Redis   NoSql   IE   DATABASE   MQ   Bootstrap   NGINX   js   其他Web框架   Jquery   peewee   web工具  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广