nginx conf 設定教學
nginx.conf 是 Nginx 預設的主要配置文件,所有功能的實現都與此文件的配置有關。
所在路徑
會依據安裝方式導致被放置的路徑不同,可以透過 nginx -t 來查詢。
基本架構
打開 nginx.conf 配置文件,從整體結構可以看出,該文件主要由以下幾個部分組成。
main
events {...}
http {
server {
location {...}
}
}
它是由一連串的指令(directive)所組成的。可針對特定的部分作設定。
指令類型分為兩種:單行指令(simple directive)及模塊(block directive)。
「單行指令」要以分號 ; 結尾,而「模塊」則會有一組大括號 {},包著其他的指令(單行指令或是模塊)。
因此 nginx.conf 中顯眼的 events、http、server 及 location 都是模塊,同時它們有著從屬關係。而最底層的模塊只會有兩種:event 及 http。又被稱呼為 main context。如下:
events {...}
http {
# server 一定在 http 裡面
server {
# location 一定在 server 裡面
location {...}
}
}
「單行指令」會對把它包起來的「模塊」作配置,舉最簡單的例子:
# listen 是個 「單行指令」
# 對 server 這個「模塊」作設定
# 指定它(server)監聽 port 80
server {
listen 80;
}
常用模塊
events
控制 nginx 處理連接的方式
http
nginx 處理 http 請求的主要配置模塊,大多數的配置都在這裡進行
server
nginx 中主機的配置模塊,可用於配置多個虛擬主機
location
server 中,對應目錄的控制模塊,可以有多個。
location 有「定位」的意思,主要是根據 URI 來進行不同的定位,可以把網站的不同部分,定位到不同的處理方式上。在虛擬主機的配置中,是必不可少的。
基礎語法
locaiton有四中類型的匹配規則,分別為完全匹配(=),前綴普通匹配(^~),正則表達式匹配(~或者~*),通用匹配
location [=|^~|~|~*|/] patt {
}
精確匹配(=):表示進行精確匹配,要完全一樣才算匹配。
前綴普通匹配(^~):表示URI以某個常規字符串開頭,不是正則匹配。一般用來匹配目錄。
正則表達式匹配(~):波浪線表示執行一個「正規表達式」的匹配,區分大小寫。
正則表達式匹配(~*):表示執行一個「正規表達式」的匹配,不區分大小寫。
通用匹配(/):如果沒有其他條件被匹配到,就會進到這裏面。
如何發揮作用
語法範例
location = / {
# 精確匹配 / ,主機名後面不能帶任何字符串
[ configuration A ]
}
location / {
# 因為所有的地址都以 / 開頭,所以這條規則將匹配到所有請求
# 但是正則和最長字符串會優先匹配
[ configuration B ]
}
location /documents/ {
# 匹配任何以 /documents/ 開頭的地址,匹配符合以後,還要繼續往下搜索
# 只有後面的正則表達式沒有匹配到時,才會採用這一條
[ configuration C ]
}
location ~ /documents/Abc {
# 匹配任何以 /documents/Abc 開頭的地址,匹配符合以後,還要繼續往下搜索
# 只有後面的正則表達式沒有匹配到時,才會採用這一條
[ configuration CC ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 開頭的地址,匹配符合以後,停止往下搜索正則,採用這一條。
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif,jpg或jpeg 結尾的請求
# 然而,所有請求 /images/ 下的圖片會被 config D 處理,因為 ^~ 到達不了這一條正則
[ configuration E ]
}
location /images/ {
# 字符匹配到 /images/,繼續往下,會發現 ^~ 存在
[ configuration F ]
}
location /images/abc {
# 最長字符匹配到 /images/abc,繼續往下,會發現 ^~ 存在
# F與G的放置順序是沒有關係的 [ configuration G ]
}
location ~ /images/abc/ {
# 只有去掉 config D 才有效:先最長匹配 config G 開頭的地址,繼續往下搜索,匹配到這一條正則,採用
[ configuration H ]
}
location ~* /js/.*/\.js {
# 不區分大小寫匹配
[ configuration I ]
}
常用的單行指令
try_files
其作用是按順序檢查文件是否存在,返回第一個找到的文件或文件夾(結尾加斜線表示為文件夾),如果所有的文件或文件夾都找不到,會進行一個內部重定向到最後一個參數。
需要注意的是,只有最後一個參數可以引起一個內部重定向,之前的參數只設置內部URI的指向。最後一個參數是回退URI且必須存在,否則會出現內部500錯誤。
※ try_files 至少要兩個參數。
〔陸續更新中〕
參考資料
https://blog.csdn.net/wudinaniya/java/article/details/81277370
https://kknews.cc/zh-tw/code/9zjl298.html
https://www.itread01.com/content/1550398514.html
https://www.hi-linux.com/posts/53878.html

留言
張貼留言