搭建Tornado+Nginx

  Tornado一個高效的異步非阻塞式的實時Web服務器,是Facebook旗下的 FriendFeed 網站開源Web服務器版本。可是它內置的HTTP服務器功能有限,不能在生產環境下使用。javascript

  

  在 FriendFeed 中,他們使用Nginx作負載均衡和靜態文件伺服。 多臺服務器上,同時部署了多個 Tornado 實例,一般,一個 CPU 內核 會對應一個 Tornado 線程。由於Tornado是跑在負載均衡服務器(如 nginx)後面的,因此須要把 xheaders=True 傳到 HTTPServer的構造器當中去。這是爲了讓 Tornado 使用 X-Real-IP 這樣的的 header 信息來獲取用戶的真實 IP地址,若是使用傳統 的方法,你只能獲得這臺負載均衡服務器的 IP 地址。css

  下面是 nginx 配置文件的一個示例,總體上與FriendFeed 中使用的差很少html

  我新建了一個 tornado-simple 的項目,這是個人目錄結構前端

 

 

  static目錄裏面存放靜態文件,到時候在配置Nginx時靜態目錄時,就指向該目錄。java

  app.py的代碼node

 1 # -*- coding: utf-8 -*-
 2 
 3 import tornado.ioloop
 4 import tornado.web
 5 
 6 
 7 class MainHandler(tornado.web.RequestHandler):
 8     def get(self):
 9         self.write("Hello, world")
10 
11 
12 
13 app = tornado.web.Application([
14     (r"/", MainHandler),
15 ])
16 if __name__ == "__main__":
17     app.listen(8080)
18     tornado.ioloop.IOLoop.instance().start()

  下面是nginx.conf配置python

 1 # 工做線程數
 2 worker_processes  1;
 3 
 4 # 錯誤日誌
 5 error_log  logs/error.log;
 6 
 7 # pid
 8 pid        logs/nginx.pid;
 9 
10 #鏈接數
11 events {
12     worker_connections  1024;
13 }
14 
15 # 配置HTTP
16 http {
17     #上行的前端
18     upstream frontends{
19         server 127.0.0.1:8080;
20     }
21     #可識別的媒體類型
22     include       mime.types;
23     default_type  application/octet-stream;
24     access_log  logs/access.log;
25     
26     # 是否可發送文件 
27     sendfile        on;
28     # 長鏈接
29     keepalive_timeout  65;
30     # 代理超時
31     proxy_read_timeout 200;
32     #關閉tcp push
33     tcp_nopush on;
34     # 關閉tcp延遲
35     tcp_nodelay on;
36     # 啓用gzip壓縮算法
37     gzip on;
38     gzip_min_length 1000;
39     gzip_proxied any;
40     gzip_types text/plain  text/css text/xml
41                application/x-javascript application/xml
42                application/atom+xml text/javascript;
43     proxy_next_upstream error;
44     
45     # 監聽服務器配置
46     server {
47         listen       80;
48         server_name  localhost;
49         #容許文件上傳的最大大小
50         client_max_body_size 50M;
51         
52         # 指定靜態文件映射
53         location ^~ /static/ {
54             root 你本身的目錄/tornado-simple/;
55             if ($query_string) {
56                 expires max;
57             }
58             index  index.html index.htm;
59         }
60         # 重寫 favicon.ico
61         location = /favicon.ico {
62             rewrite (.*) /static/favicon.ico;
63         }
64         # 指定默認的錯誤頁面
65         error_page   500 502 503 504  /50x.html;
66         location = /50x.html {
67             root   html;
68         }
69         
70         #代理配置
71         location / {
72             proxy_pass_header Server;
73             proxy_set_header Host $http_host;
74             proxy_redirect off;
75             proxy_set_header X-Real-IP $remote_addr;
76             proxy_set_header X-Scheme $scheme;
77             proxy_pass http://frontends;
78         }
79     }
80 }

  啓動Tornadonginx

1 python app.py

  啓動nginxweb

1 sudo nginx
相關文章
相關標籤/搜索