天天看點

為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-×××

繼續閱讀