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爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
python先序遍历二叉树问题
Nov 10 Python
django站点管理详解
Dec 12 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
Python解决pip install时出现的Could not fetch URL问题
Aug 01 Python
python如何从文件读取数据及解析
Sep 19 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
Jan 20 Python
Python中常见的数制转换有哪些
May 27 Python
用python实现一个简单的验证码
Dec 09 Python
pytest配置文件pytest.ini的详细使用
Apr 17 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
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
php实现的生成排列算法示例
2019/07/25 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
python输入错误后删除的方法
2019/10/12 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
欧克利英国官网:Oakley英国
2019/08/24 全球购物
新疆民族团结演讲稿
2014/08/27 职场文书
离婚民事起诉状
2015/08/03 职场文书
创业计划书之家政服务
2019/09/18 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang