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

留言

熱門文章