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 相关文章推荐
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
python实现求最长回文子串长度
Jan 22 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
Python闭包函数定义与用法分析
Jul 20 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
django models里数据表插入数据id自增操作
Jul 15 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
利用Python实现自动扫雷小脚本
Dec 17 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 Python
利用python实现汉诺塔游戏
Mar 01 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自动跳转中英文页面
2008/07/29 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
python分割文件的常用方法
2014/11/01 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
如何清空Session
2015/02/23 面试题
音乐专业自荐信
2014/02/07 职场文书
企业出纳岗位职责
2014/03/12 职场文书
幼儿园老师寄语
2014/04/03 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
学习保证书
2015/01/17 职场文书
500字小学生检讨书
2015/02/19 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
python实现手机推送 代码也就10行左右
2022/04/12 Python