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中的进程分支fork和exec详解
Apr 11 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
pandas DataFrame 交集并集补集的实现
Jun 24 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
Python带参数的装饰器运行原理解析
Jun 09 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截取后台登陆密码的代码
2012/05/05 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python正则捕获操作示例
2017/08/19 Python
python 显示数组全部元素的方法
2018/04/19 Python
python hook监听事件详解
2018/10/25 Python
对python字典过滤条件的实例详解
2019/01/22 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
Django框架视图介绍与使用详解
2019/07/18 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
毕业生机械建模求职信
2013/10/14 职场文书
大学四年职业生涯规划书范文
2014/01/02 职场文书
俄罗斯商务邀请函
2014/01/26 职场文书
行政求职信
2014/07/04 职场文书
单位考核鉴定意见
2015/06/05 职场文书
门卫管理制度范本
2015/08/05 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android