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中__init__()方法的高级应用
May 11 Python
Python卸载模块的方法汇总
Jun 07 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
在python中安装basemap的教程
Sep 20 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
用python打印菱形的实操方法和代码
Jun 25 Python
Python线程条件变量Condition原理解析
Jan 20 Python
Win10里python3创建虚拟环境的步骤
Jan 31 Python
Python进程Multiprocessing模块原理解析
Feb 28 Python
python 链接sqlserver 写接口实例
Mar 11 Python
使用python实现飞机大战游戏
Mar 23 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 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
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
2009/08/04 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python 实现简单的电话本功能
2015/08/09 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
关于python多重赋值的小问题
2019/04/17 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
C面试题
2015/10/08 面试题
早会主持词
2014/03/17 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
机关保密工作承诺书
2015/05/04 职场文书
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫
Redis批量生成数据的实现
2022/06/05 Redis