NGINX static file server
Image Server
設定 nginx config 可讓 nginx 根據 route match 的結果對應到特定的檔案, route 的設定方式為修改 default.conf 檔案(位於 /etc/nginx/conf.d/ )。
首先建立新的一個 location 區塊如下
location / { //do something
}
其意思為當進來的 request 路徑 match / 這個規則的時候,會執行此 block裡面的內容(包含轉導),nginx 會以 match 到最長的 route 來執行,言下之意,在 default.conf 檔案中可以設定多組 location 的規則,如:
location / {//do something
}location /images {//do something
}location ~ .*\.(gif|jpg|jpeg|png)$ {//do something
}
這次完成的目標為,提供外部服務取得圖片的服務,實現方式則是使用 nginx 分析 request 後,根據 match 結果讀取不同檔案並回傳。
實現方式為提供一個網址,在此範例中使用:
{service host}/images/{imageName}.jpg
首先在 server 上建立圖片存放路徑,如 home/images/,接著設定 location的資訊如下:
location /images { //注意 images後沒有 "/" //兩種設定方式 //方法1: 使用 root 直接指定上一層的位置
root /home; //方法2: 使用 alias 轉到另一個路徑
alias /home/images;
}
說明:
Line 1:
定義外部呼叫的時候要透過哪個路徑,這裡的寫法表示使用 service host/image/ 這個路徑表示要取得圖片
Line 5:
第一種方法,使用 root 指定上一層的檔案路徑,這裡有一個特別的地方,就是locatoin 的路徑會套用在 root 後面成為實際讀取 server的路徑,也就是root的路徑是 /home 加上 location 的 route路徑 /images 變成 home/images,一開始一直被這個搞到,要特別注意!
Line 7:
除了直接指定,也可以用 alias 的方式。跟指定 root 不同的是,實際讀取 server 的路徑是 alias 的路徑,也就是 location 的 route 路徑可以隨便你打,例如:
location /image/animal {
alias /home/images;
}
當 nginx 收到 requset 的存取路徑是 /image/animal/時,將自動透過 alias 自動對應到 server 實際的檔案路徑。這方法就不用暴露實際路徑位置,比較彈性。
以上設定完畢後,別忘了測試 config 的設定是否正確,儲存並退出後,記得使用下列指令測試是否正常:
nginx -t
測試設定正常後,可以再輸入下列指令重新讀取 config 使本次設定生效:
nginx -s reload