天天看点

为Tornado配置Nginx反向代理

tornado的确很给力,知乎、facebook一直在用。不过tornado也有自己的局限性,比如它就没有实现完整的http协议,甚至一些rest方法都不支持。不过这也难为它了,本来就是一个web framework顺便兼职干一点web server的事情而已,有就不错了。好在tornado现在有了好伙伴nginx,像https,负载均衡,静态文件这种破事都可以交给nginx去处理了。

从源代码编译安装nginx需要处理一些依赖

<a href="http://nginx.org/">nginx官网</a>

<a href="http://www.pcre.org/">pcre官网</a>

<a href="http://www.zlib.net/">zlib官网</a>

下载好之后解压至同一根目录下。

<code>$ ./configure</code>

<code>--sbin-path=/usr/local/nginx/nginx</code>

<code>--conf-path=/usr/local/nginx/nginx.conf</code>

<code>--pid-path=/usr/local/nginx/nginx.pid</code>

<code>--with-http_ssl_module</code>

<code>--with-pcre=../pcre-8.38</code>

<code>--with-zlib=../zlib-1.2.8</code>

<code>--with-openssl=../openssl-1.0.2g</code>

<code></code>

<code>#上面只是为了好看....</code>

<code>$ ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=../pcre-8.38 --with-zlib=../zlib-1.2.8 --with-openssl=../openssl-1.0.2g</code>

<code>$ make -j8 &amp;&amp; sudo make install</code>

需要注意的是,mac下和linux下默认生成的目录是不一样的。

nginx运行一般要求root权限。

nginx命令行参数相当简单,因为功夫全在配置文件里了……。

<code>#启动nginx实例</code>

<code>$ nginx</code>

<code>#使用指定的配置文件启动nginx</code>

<code>$ nginx -c &lt;conf_file&gt;</code>

<code>#向nginx发出信号</code>

<code>$ nginx -s [stop| quit| reopen| reload]</code>

<code>user nobody nobody;</code>

<code>worker_processes 1;</code>

<code>error_log /var/log/nginx/error.log;</code>

<code>pid /var/run/nginx.pid;</code>

<code>events {</code>

<code>worker_connections 1024;</code>

<code>use kqueue;</code>

<code>}</code>

<code>http {</code>

<code># enumerate all the tornado servers here</code>

<code>upstream frontends {</code>

<code>server 127.0.0.1:8888;</code>

<code>include /usr/local/nginx/conf/mime.types;</code>

<code>default_type application/octet-stream;</code>

<code>access_log /var/log/nginx/access.log;</code>

<code>keepalive_timeout 65;</code>

<code>proxy_read_timeout 200;</code>

<code>sendfile on;</code>

<code>tcp_nopush on;</code>

<code>tcp_nodelay on;</code>

<code>gzip on;</code>

<code>gzip_min_length 1000;</code>

<code>gzip_proxied any;</code>

<code># only retry if there was a communication error, not a timeout</code>

<code># on the tornado server (to avoid propagating "queries of death"</code>

<code># to all frontends)</code>

<code>proxy_next_upstream error;</code>

<code>server {</code>

<code>listen 80;</code>

<code># allow file uploads</code>

<code>client_max_body_size 50m;</code>

<code>location ^~ /static/ {</code>

<code>root /volumes/data/vserver;</code>

<code>if ($query_string) {</code>

<code>expires max;</code>

<code>location ^~ /upload/ {</code>

<code>location = /favicon.ico {</code>

<code>access_log off;</code>

<code>rewrite (.*) /static/other/favicon.ico;</code>

<code>location = /robots.txt {</code>

<code>rewrite (.*) /static/other/robots.txt;</code>

<code># ali heartbeat dectection</code>

<code>location = /status.taobao {</code>

<code>rewrite (.*) /static/other/status.taobao;</code>

<code>location / {</code>

<code>proxy_pass_header server;</code>

<code>proxy_set_header host $http_host;</code>

<code>proxy_redirect off;</code>

<code>proxy_set_header x-real-ip $remote_addr;</code>

<code>proxy_set_header x-scheme $scheme;</code>

<code>proxy_pass http://frontends;</code>

<code># user nobody nobody;</code>

<code>#error_log /var/log/nginx/error.log;</code>

<code>#pid /var/run/nginx.pid;</code>

<code>include /usr/local/nginx/mime.types;</code>

<code>#access_log /var/log/nginx/access.log;</code>

<code>root /home/vonng/vserver;</code>

下一篇: CA-×××

继续阅读