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

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

Py站长 • 9 年前 • 3765 次点击  

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
 
3765 次点击  
文章 [ 1 ]  |  最新文章 9 年前
BeginMan
Reply   •   1 楼
BeginMan    9 年前

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