nginx (Engine X ) 是比 Apache 小巧快速的網頁伺服器,設定上相對沒有那麼強大與複雜。
Apache 是採用行程池運作比較消耗資源,而 nginx 則是 event based,不會依照 request 生成 process or thread。
下載網址:http://nginx.org/en/download.html
只是操作起來比較不熟悉,跟 apache 用 service 的方式比較不同,所以比較不親和一點…但是相對來說設定的細節都比較容易
設定檔在 /etc/nginx.conf
nginx 當初是為了 reverse porxy 所設計的,所以在 r-proxy 上理當應該比 apache 為更適當的選擇[1]
$ nginx # 啟動
$ nginx -t # 檢查設定檔格式是否正確
$ nginx -s [stop|reload|...] # 送訊號給正在執行的 nginx
可以用 fastcgi 搭配 django 運作,
可以額外 include 一個 django 的設定檔,內容如下:
server {
listen 80;
server_name server.com;
location / {
fastcgi_pass unix:/home/www/server.sock;
# fastcgi_pass 127.0.0.1:8000;
include fastcgi.conf;
access_log /var/log/nginx_django.log;
}
}
然後用 django 內建的 server 跑 fastcgi 模式,就能讓 django 跟 nginx 接起來囉。
$ kill `cat /home/www/server.pid`
$ python ./manage.py runfcgi method=threaded \
socket=/home/www/server.sock pidfile=/home/www/server.pid
這邊指定用 thread 的方式跑,然後把 socket 建在該檔案位置,用在重開的時候要用,這個 socket 位置對應到上面的 nginx 設定的 socket 位置,
也可以跑在某個 port 上面去對應,只是用檔案的方式好像比較安全?!..我也不太懂=_=
另外 django 內的 fastcgi.conf 內要注意一點:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
<strong>fastcgi_param SCRIPT_NAME $fastcgi_script_name;</strong>
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
<strong>fastcgi_param PATH_INFO $fastcgi_script_name;</strong>
粗體的設定是 django url 在 route 會用來判斷的變數要設定對。
然後在專案內的 setting.py 的裡面加上 FORCE_SCRIPT_NAME=”/”
原因跟上面 route 路由規則有關,否則網址倒頁的時候會出問題。 參考資源: