博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用nginx做tornado的反向代理
阅读量:6688 次
发布时间:2019-06-25

本文共 3870 字,大约阅读时间需要 12 分钟。

hot3.png

1.tornado的demo

首先写一个tornado的demo

在生产环境中,一般使用单个的进程启动,为了简单起见,这里我们使用multiprocessing模块启动多个进程,模拟生产环境

#!/usr/bin/python#-*-encodeing:utf-8-*-import tornado.webimport tornado.ioloopimport tornado.optionsimport multiprocessingfrom tornado.options import define,optionsimport os,sysdefine("port", default=9000, help="run on the given port", type=int)class BaseHandler(tornado.web.RequestHandler):    def get_current_user(self):        return self.get_secure_cookie('user')    def get_template_path(self):        return os.path.join(os.path.dirname(__file__),'templates')class MainHandler(BaseHandler):    @tornado.web.asynchronous    @tornado.web.authenticated    def get(self):        name=tornado.escape.xhtml_escape(self.current_user)        self.write('Hello'+self.current_user)        self.finish()class LoginHandler(BaseHandler):    def lower(self,string):        return string.lower()    def get(self):        self.write('''  MyDemo      
Username:
Password:
'''), def post(self): if not self.request.headers.get('Cookie'): self.write('Please enable your Cookie option of your broswer.') return self.set_secure_cookie('user',self.get_argument('username'),expires_days=1) self.redirect('/')settings={ 'static_path':os.path.join(os.path.dirname(__file__),'static'), 'cookie_secret':'F/hsxF7kTIWGO1F6HrH78Rf4bMRe5EyFhjtReh6x+/E=', 'login_url':'/login', 'debug':True,}app=tornado.web.Application([ (r'/',MainHandler), (r'/login',LoginHandler),],**settings)if __name__ == '__main__': tornado.options.parse_command_line() def run(mid,port): print "Process %d start" % mid sys.stdout.flush() app.listen(port) tornado.ioloop.IOLoop.instance().start() jobs=list() for mid,port in enumerate(range(9010,9014)): p=multiprocessing.Process(target=run,args=(mid,port)) jobs.append(p) p.start()
运行后,会启动4个进程

2.配置nginx的反相代理

参考安装好nginx后

进入nginx的配置目录:

cd /usr/local/nginx/conf

备份原配置文件

mv nginx.conf  nginx.conf.bak20130507

使用编辑器打开nginx.conf

#user nginx;worker_processes 1;error_log /var/log/nginx/error.log;pid /var/run/nginx.pid;events {    worker_connections 1024;    use epoll;}http {    # Enumerate all the Tornado servers here    upstream frontends {        server 127.0.0.1:9010;        server 127.0.0.1:9011;        server 127.0.0.1:9012;        server 127.0.0.1:9013;    }    include /etc/nginx/mime.types;    default_type application/octet-stream;    access_log /var/log/nginx/access.log;    keepalive_timeout 65;    proxy_read_timeout 200;    sendfile on;    tcp_nopush on;    tcp_nodelay on;    gzip on;    gzip_min_length 1000;    gzip_proxied any;    gzip_types text/plain text/html text/css text/xml               application/x-javascript application/xml               application/atom+xml text/javascript;    # Only retry if there was a communication error, not a timeout    # on the Tornado server (to avoid propagating "queries of death"    # to all frontends)    proxy_next_upstream error;    server {        listen 80;        # Allow file uploads        client_max_body_size 50M;        location ^~ /static/ {            root /var/www;            if ($query_string) {                expires max;            }        }        location = /favicon.ico {            rewrite (.*) /static/favicon.ico;        }        location = /robots.txt {            rewrite (.*) /static/robots.txt;        }        location / {            proxy_pass_header Server;            proxy_set_header Host $http_host;            proxy_redirect false;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Scheme $scheme;            proxy_pass http://frontends;        }    }}
重启nginx

/etc/init.d/nginx_init reload

在浏览器中打开服务器ip的80端口就可以访问tornado的demo应用了

转载于:https://my.oschina.net/chenlei123/blog/128345

你可能感兴趣的文章
socket编程演示样例(多线程)
查看>>
C++ 初始化与赋值
查看>>
碰到的异常
查看>>
TOMCAT 关闭报错:Tomcat did not stop in time. PID file was not removed
查看>>
Android对话框-上篇-之系统对话框
查看>>
利用Segue在视图控制器间传值的问题
查看>>
登台轮赠春联 厦门边检便利通关暖台胞
查看>>
发动机存隐患 现代起亚宣布在美召回16.8万辆车
查看>>
长春7旬老人收藏明信片48年 6千张见证国家变迁
查看>>
最前线|VIPKID正寻求4-5亿美元新一轮融资,估值达60亿美元
查看>>
文 OR 理?答案都在这里!
查看>>
ES6 Module之export
查看>>
XML+JSON面试题都在这里
查看>>
教你如何攻克Kotlin中泛型型变的难点(实践篇)
查看>>
2018Android面试经历
查看>>
不受限对抗样本挑战赛介绍
查看>>
推荐10个Java方向最热门的开源项目(8月)
查看>>
浅解前端必须掌握的算法(三):直接插入排序
查看>>
[译] TensorFlow 教程 #06 - CIFAR-10
查看>>
处理 JavaScript 复杂对象:深拷贝、Immutable & Immer
查看>>