詳解Nginx如何配置Web伺服器

安全劍客發表於2020-05-03
這篇文章主要介紹了詳解 Nginx如何配置Web伺服器的示例程式碼,文中透過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
概述

今天主要分享怎麼將NGINX配置作為Web伺服器,幷包括以下部分:
•設定虛擬伺服器
•配置位置
•使用變數
•返回特定狀態碼
•重寫HTTP響應
在高層次上,將NGINX配置作為Web伺服器有一些問題需要了解,定義它處理哪些URL以及如何處理這些URL上的資源的HTTP請求。 在較低層次上,配置定義了一組控制對特定域或IP地址的請求的處理的虛擬伺服器。
用於HTTP流量的每個虛擬伺服器定義了稱為位置的特殊配置例項,它們控制特定URI集合的處理。 每個位置定義了自己的對映到此位置的請求發生的情況。 NGINX可以完全控制這個過程。 每個位置都可以代理請求或返回一個檔案。 此外,可以修改URI,以便將請求重定向到另一個位置或虛擬伺服器。 此外,可以返回特定的錯誤程式碼,也可以配置特定的頁面以對應於每個錯誤程式碼。
詳解Nginx如何配置Web伺服器詳解Nginx如何配置Web伺服器

1. 設定虛擬伺服器

NGINX配置檔案必須至少包含一個伺服器指令來定義虛擬伺服器。 當NGINX處理請求時,它首先選擇提供請求的虛擬伺服器。
虛擬伺服器由http上下文中的伺服器指令定義,例如:

http { 
 server { 
 # Server configuration 
 } 
}

可以將多個server指令新增到http上下文中以定義多個虛擬伺服器。
server配置塊通常包括一個listen指令,用於指定伺服器偵聽請求的IP地址和埠(或Unix域套接字和路徑)。IPv4和IPv6地址均被接受; 將方括號(。
下面的示例顯示了監聽IP地址127.0.0.1和埠8080的伺服器的配置:

server { 
 listen 127.0.0.1:8080; 
 # The rest of server configuration 
}

如果省略埠,則使用標準埠。 同樣地,如果省略一個地址,伺服器將偵聽所有地址。 如果沒有包含listen指令,則“標準”埠為80/tcp,“default”埠為8000/tcp,具體取決於超級使用者許可權。
如果有多個伺服器與請求的IP地址和埠相匹配,則NGINX將根據伺服器塊中的server_name指令測試請求的主機頭域。 server_name的引數可以是完整(精確)名稱,萬用字元或正規表示式。 萬用字元是一個字串,其開頭,結尾或兩者都包含星號(*); 星號匹配任何字元序列。 NGINX將Perl語法用於正規表示式; 在它們之前使用波浪號()。 此示例說明了一個確切的名稱。

server { 
 listen 80; 
 server_name example.org 
 ... 
}
2. 配置位置

NGINX可以根據請求URI向不同的代理傳送流量或提供不同的檔案。 這些塊是使用放置在server指令中的location指令來定義的。
例如,您可以定義三個location塊,以指示虛擬伺服器向一個代理伺服器傳送一些請求,將其他請求傳送到不同的代理伺服器,並透過從本地檔案系統傳遞檔案來提供其餘請求。
NGINX測試根據所有location指令的引數請求URI,並應用匹配location中定義的指令。 在每個location塊內,通常可能(除了一些例外)放置更多的location指令以進一步細化特定組請求的處理。
注意:在本教程文章中,單詞location是指單個location上下文。
location指令有兩種型別的引數:字首字串(路徑名)和正規表示式。 對於要匹配字首字串的請求URI,必須以字首字串開頭。
具有pathname引數的以下示例位置匹配以/some/path/開頭的請求URI,例如/some/path/document.html,它不匹配/my-site/some/path,因為/some/path不在該URI的開頭出現。

location /some/path/ { 
 ... 
}

正規表示式之前是區分大小寫匹配的波形符號(~),或者不區分大小寫匹配的波形符號(~*)。 以下示例將包含字串.html或.html的URI與任何位置相匹配。

location ~ \.html? { 
 ... 
}

要找到最符合URI的位置,NGINX首先將URI與字首字串的位置進行比較。然後用正規表示式搜尋位置。
location上下文可以包含定義如何解析請求的指令 - 提供靜態檔案或將請求傳遞給代理的伺服器。 在以下示例中,匹配第一個location上下文的請求將從/data/images目錄中提供檔案,並將匹配第二個位置的請求傳遞給承載 域內容的代理伺服器。

server { 
 location /images/ { 
 root /data; 
 } 
 location / { 
 proxy_pass http://; 
 } 
}

root指令指定要在其中搜尋要提供的靜態檔案的檔案系統路徑。 與該位置相關聯的請求URI將附加到路徑,以獲取要提供的靜態檔案的全名。 在上面的示例中,要響應/images/logo.png的請求,NGINX提供伺服器本地實際對應檔案是:/data/images/logo.png。
proxy_pass指令將請求傳遞給使用配置的URL訪問代理伺服器。然後將代理伺服器的響應傳回客戶端。在上面的示例中,所有不以/images/開頭的URI的請求都將被傳遞給代理的伺服器(也就是:)。

3. 使用變數

可以使用配置檔案中的變數,使NGINX程式的請求根據定義的情況而有所不同。 變數是在執行時計算的命名值,用作指令的引數。 一個變數由它的名字開頭的$(美元)符號表示。 變數根據NGINX的狀態定義資訊,例如正在處理的請求的屬性。
有許多預定義的變數,如核心HTTP變數,您可以使用set,map和geo指令定義自定義變數。 大多數變數在執行時計算的,幷包含與特定請求相關的資訊。 例如,$remote_addr包含客戶端IP地址,$uri儲存當前的URI值。

4. 返回特定狀態碼

一些網站URI需要立即返回具有特定錯誤或重定向程式碼的響應,例如當頁面被暫時移動或永久移動時。 最簡單的方法是使用return指令。 例如返回未找到的404狀態碼:

location /wrong/url { 
 return 404; 
}

返回的第一個引數是響應程式碼。可選的第二個引數可以是重定向的URL(程式碼301,302,303和307)或在響應體中返回文字。 例如:

location /permanently/moved/url { 
 return 301 http:///moved/here; 
}

返回指令可以包含在 location 和 server 上下文中。

5. 重寫HTTP響應

有時需要重寫或更改HTTP響應中的內容,將一個字串替換為另一個字串。 可以使用sub_filter指令來定義要應用的重寫。 該指令支援變數和替代鏈,使更復雜的更改成為可能。
例如,可以更改引用除代理伺服器之外的絕對連結:

location / { 
 sub_filter /blog/ /blog-staging/; 
 sub_filter_once off; 
}

另一個示例將方法從http://更改為http://,並從請求頭域替換本地主機地址到主機名。 sub_filter_once指令告訴NGINX在一個位置(location)內連續應用sub_filter偽指令:

location / { 
 sub_filter 'href="
 sub_filter 'img src="
 sub_filter_once on; 
}

請注意,如果發生另一個sub_filter匹配,則使用sub_filter修改的響應部分將不再被替換。
到此這篇關於詳解Nginx如何配置Web伺服器的示例程式碼的文章就介紹到這了

原文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2689733/,如需轉載,請註明出處,否則將追究法律責任。

相關文章