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 文件管理实例详解
Nov 10 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
Linux下python制作名片示例
Jul 20 Python
python 3.6.5 安装配置方法图文教程
Sep 18 Python
python实现文本界面网络聊天室
Dec 12 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
Python----数据预处理代码实例
Mar 20 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
python实现简单学生信息管理系统
Apr 09 Python
python字符串的多行输出的实例详解
Jun 08 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
基于jQuery的表格操作插件
2010/04/22 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python自动生产表情包
2017/03/17 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
python虚拟环境完美部署教程
2019/08/06 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
小学爱国卫生月活动总结
2014/06/30 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
业务员辞职信范文
2015/03/02 职场文书
培训通知
2015/04/17 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
Python制作表白爱心合集
2022/01/22 Python