2015年12月1日

Tornado 教學 (14) - 使用 Nginx 教學 #1 ( Use Nginx for Tornado Web Application #1 )

雖然 Tornado 已經內含了自己的 Web Server,然而在面對大量使用者以及多個 Processes 的狀況下搭配使用 Nginx 是不錯的選擇。因此,本篇將介紹如何設定、使用 Nginx。( 其他 Tornado 相關教學可以參考本篇整理 )



安裝 Nginx:
Nginx 安裝的方式有很多種,因為本範例是在 Mac OS X 上運行,所以我使用 Homebrew 來安裝,指令如下:
brew install nginx


設定 Nginx:
安裝好 Nginx 後,接著來修改設定檔,安裝時會有一個預設的設定檔於 /usr/local/etc/nginx/ 底下,打開 nginx.conf 來修改,內容參考如下:
# 設定啟動 Process 數量
worker_processes 4;

# 設定 Log 檔案名稱及存放位置, 後面可加上 Log level 參數,
# e.g. info, notice, error
error_log /your/path/nginx.log;

# 設定 pid 檔案名稱與存放位置
pid /your/path/nginx.pid;

events {
    # 連接數量
    worker_connections  1024;
    # 定義處理方式, e.g. select, poll, kqueue, epoll
    # 根據作業系統不同選擇適合的模式, Mac OS X 使用 kqueue
    use kqueue;
}

http {
    # 指定 Tornado Server
    upstream myapp {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
        server 127.0.0.1:8003;
    }

    # 設定 gzip 相關參數, 請參考 gzip_module
    gzip on;
    gzip_min_length 20;
    gzip_proxied any;
    gzip_types text/plain text/css text/xml
               application/x-javascript application/xml
               application/atom+xml text/javascript;

    server {
        # 設定監聽 port 80
        listen 80;
        # 設定 Server 名稱, e.g. www.yourweb.com
        server_name localhost;

        # 設定靜態資源請求相關參數, 將你的靜態資料路徑加入,
        # 若出現 403 時請檢查檔案權限是否正確
        # 若出現 404 時請檢查 Log 查看 Request 的路徑是否正確
        location /static/ {
            root /your/path/to/app;
            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://myapp;
        }
    }
}
按照上面的範例,我們已經完成設定的步驟。


使用 Nginx:
以下列出常用的 Nginx 的指令:
# 啟動 Nginx 並加入 -c 參數指定設定檔位置
nginx -c /your/path/nginx.conf

# 更新
nginx -s reload

# 停止
nginx -s stop


Environment :
  ・ Mac OS X
  ・ Python 2.7

Reference :
  ・ Tornado
  ・ Nginx


熱門文章