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


Posted in Python onAugust 22, 2014

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服务器中绑定域名、虚拟主机的方法

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

Python 相关文章推荐
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
django框架创建应用操作示例
Sep 26 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
学习Python爬虫的几点建议
Aug 05 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
python中super()函数的理解与基本使用
Aug 30 Python
python with statement 进行文件操作指南
Aug 22 #Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 #Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 #Python
Python升级提示Tkinter模块找不到的解决方法
Aug 22 #Python
Python实现多行注释的另类方法
Aug 22 #Python
Python利用pyHook实现监听用户鼠标与键盘事件
Aug 21 #Python
Python发送Email方法实例
Aug 21 #Python
You might like
php foreach 使用&(与运算符)引用赋值要注意的问题
2010/02/16 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
Python的gevent框架的入门教程
2015/04/29 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
查看django版本的方法分享
2018/05/14 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
python pillow模块使用方法详解
2019/08/30 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
自我鉴定思想方面
2013/10/07 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
善意的谎言事例
2014/02/15 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
创先争优公开承诺书
2014/08/30 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript