2014-09-16
完成一个tornado项目后,可能会因为以下原因需要nginx为其做反向代理:
- 为了提升网站性能,tornado需要开启多个实例,每个实例监听一个非80端口,由nginx监听80端口,把请求转发给tornado实例,并向客户端响应tornado的响应。
- 虚拟主机。一台主机上可能有多个不同域名的站点,nginx可以将指定的域名的请求转发给特定的web程序。
我使用的是系统是linux mint 16,nginx版本是nginx version: nginx/1.4.1 (Ubuntu),Tornado版本是3.2.2。
假设有一个tornado实例监听8888
端口,该站点名为webapp
,在目录/home/webapp
下。/home/webapp/server.py
是Tornado主程序,/home/webapp/static
存放静态文件(例如css、js、图片等)。该站点域名为webapp.letiantian.xyz。
据此,可以在/etc/nginx/sites-enabled/
目录下创建文件webapp.conf
(也可以是其他名称),内容如下:
upstream webapp {
server 127.0.0.1:8888;
}
server
{
listen 80;
server_name webapp.letiantian.xyz;
server_name_in_redirect off;
access_log off;
error_log /home/webapp/nginx-error.log;
# Allow file uploads
client_max_body_size 1M;
proxy_read_timeout 10;
location = /favicon.ico {
rewrite (.*) /static/favicon.ico;
}
location = /robots.txt {
rewrite (.*) /static/robots.txt;
}
location ^~ /static/ {
root /home/webapp; #!不要含有/static
if ($query_string) {
expires max;
}
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://webapp;
}
}
配置完成后,重启nginx,打开tornado实例,就可以通过IP+默认的80端口或者使用域名webapp.letiantian.xyz
直接访问webapp了。
如果有多个tornado实例,可以在:
upstream webapp {
server 127.0.0.1:8888;
}
添加相应的套接字。
题外话,可以使用supervisor程序监控tornado程序。
参考
第八章:部署Tornado
serholiu.com / example / nginx.conf
tornado 静态文件的路径错误
How To Install and Manage Supervisor on Ubuntu and Debian VPS