前兩篇 ubuntu 上 Nginx 安裝與設定、Nginx 設定 Proxy Server 及 Load balance 文章主要說明如何安裝 Nginx 以及設置 Load balance,本篇文章主要用於調整 Nginx 上 Cache 的設定。
Cache (快取) 介紹
Cache (快取) 的目的主要是讓系統回應速度變快,減少 response 的等待時間。如果您的網頁服務有大量的靜態檔案(如:CSS、圖片檔、JS 檔案),設置 Cache 可以讓瀏覽器就會緩存這些文件,節省網路流量的費用,也可以讓使用者訪問網站會顯得更快(如果用戶第二次訪問你的網站,將會使用瀏覽器緩存中的靜態文件)。
Nginx 設定 Cache 步驟
Nginx 基本設定的步驟已於上兩篇文章有教學過,這裡的設定步驟主要會以加入 Cache 控制為主。
Step 1.
在 server 上開啟 nginx config 設定檔
cd /etc/nginx/conf.d
vi nginx.conf
Step 2.
於 location {} 模組中,用 expires 指令控制你的靜態文件快取到期時間。
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 365d;
}
在上面模組中,所有副檔名是 .jpg、.jpeg、.css 和 .js 的檔案會在瀏覽器訪問該文件之後的 365 天後過期。
Step 3.
完整 Nginx 設定檔如下。
upstream backend {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name www.example.com;
access_log /var/log/nginx/example.access.log;
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 365d;
proxy_pass http://backend;
}
}
Step 4.
重新讀取 Nginx 設定檔
/etc/init.d/nginx reload
Nginx 強制 Header不需要 Cache 步驟
Nginx 如果沒有特別設定 location 模組的指令,預設都會有 Cache 機制,也會將登入前的 Header 狀態 cache 住,此情況可能會造成使用者已經成功登入了,但頁面卻沒有 redirect 到登入後的頁面,還是停留在目前頁面,需要整個網頁重新整理後才會拿到 Session,進而導到正確的頁面。為了避免此情況發生我們可以於 location 模組中新增一段指令。
Step 1.
在 server 上開啟 nginx config 設定檔
cd /etc/nginx/conf.d
vi nginx.conf
Step 2.
於 location {} 模組中,加入 Header 不需要 cache 的指令。
location / {
add_header Cache-Control no-cache;
# 於 Header 加入不需要 Cache 指令
add_header Cache-Control private;
proxy_set_header Host $http_host;
# 使用 Nginx proxy_pass 時保留 host header,避免跳轉到 127.0.0.1:3000 而不是 www.example.com
proxy_pass http://backend;
}
Step 3.
完整 Nginx 設定檔如下。
upstream backend {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name www.example.com;
access_log /var/log/nginx/example.access.log;
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 365d;
proxy_pass http://backend;
}
location / {
add_header Cache-Control no-cache;
add_header Cache-Control private;
proxy_set_header Host $http_host;
proxy_pass http://backend;
}
}
Step 4.
重新讀取 Nginx 設定檔
/etc/init.d/nginx reload
系統環境版本資訊
- Ubuntu 14.04