摘要:主進程的主要目的就是讀取和評估配置,并且維護工作進程。工作進程實際上是處理請求。下一步,使用上一小節的服務器配置塊并將其修改為代理服務器配置。符合響應的請求將會映射到文件夾。為了使新的配置文件生效,發送信號給
概述
??譯文。參考官方文檔
??這篇指南描述了如何啟動、停止nginx,重新加載配置,并且解釋了配置文件的結構,描述了如何設置nginx去服務靜態內容,如何配置nginx作為代理服務器等。
??nginx有一個主進程和若干個工作進程。主進程的主要目的就是讀取和評估配置,并且維護工作進程。工作進程實際上是處理請求。nginx使用以事件為基礎的模型并且依賴操作系統的機制去描述在工作進程中的請求。工作進程的數量定義在配置文件中,對于一個特定的配置,這個數量可能是固定的,或者根據CPU的線程數來自動調整。
??nginx和它的模塊的工作方式是由配置文件決定的。默認情況下,配置文件是以nginx.config命名的,并且在/usr/local/nginx/conf目錄,/etc/nginx目錄,或者/usr/local/etc/nginx目錄
開始,停止和重新加載??啟動nginx,運行可執行文件。一旦nginx已經啟動,它就可以通過調用帶有-s的參數來控制。使用語法:nginx -s signal
??singal可以被下面任意一個替換
stop - 快速停止
quit - 優雅的停止
reload - 重新加載配置文件
reopen - 重新打開日志文件
??例如,等所有工作進程完成服務器的當前請求時,停止nginx進程,用如下命令nginx -s quit
??重新加載配置文件的命令發送到nginx或者nginx重啟的時候,配置文件改變的內容才會生效。重新加載執行nginx -s reload
??一旦主進程接收到重新加載的信號,它會檢查新的配置文件的語法是否合法,并且試著去執行配置文件里的內容。如果成功了,主進程會開始新的工作進程并且發送信息給老的工作進程,請求它們停止。否則主進程就會回滾配置并繼續執行老的工作進程。老的工作進程接收到停止的命令,停止接收新的請求連接并且繼續執行當前的請求直到所有的請求都處理完成。
??查看正在執行的nginx進程列表,用這個方式:ps -ax | grep nginx
??nginx是由定義在配置文件中的指令所控制的模塊組成。這些指令被分成簡單的指定和成塊的指令。一個簡單的指令由名稱和用空格、分號分隔開的參數組成。塊指令和簡單的指令有著相同的結構,但是替代分號的是,它是由一系列環繞在括號花括號周圍的附加的指令結尾。如果一個塊指令在內部的括號里有其他的指令,它被稱為內容(列如:events,http,server,location)
??處在配置文件中所有內容之外的指令被認為是main內容。events和http指令存在main內容中,server在http,location在server
??Web服務器一個重要的任務就是提供外部文件(比如像圖片或者靜態的HTML請求)。你可以實現一個例子,根據請求文件將會從不同的目錄中提供:/data/www里面包含了HTML文件,/data/images包括了圖片。這需要編輯配置文件并且要在http塊中設置帶有兩個location塊的服務塊。
??首先,創建/data/wwww文件夾并且在文件夾里面放一個帶有一些文字內容的index.html文件,然后創建/data/images文件夾把一些圖片放進去。
??下一步,打開配置文件,默認的配置文件已經包括了一些server塊的例子,大多數是注釋掉了。現在注釋掉所有的塊,并開始一個新的server塊。
http { server { } }
??通常來說,配置文件可能包含一些通過監聽的端口或者服務名稱進行區分的server塊。一旦nginx決定了哪一個server去處理一個請求,它根據服務器塊中定義的位置指令的參數測試請求頭中指定的URI。
??添加如下location塊到server塊中
location / { root /data/www; }
??location 塊定義了“/”前綴同來自請求中的URI做比較。對于匹配的請求,這個URI會被添加到定義在root指令的路徑中,也就是說,對于/data/www,會在本地文件系統上形成被請求的路徑。如果有許多匹配的location塊,nginx會選擇最長前綴的一個。上面的location塊提供了長度是一的最短的前綴,所以只有其他的location塊無法提供匹配是,才會使用這個位置塊。
??下一步,添加第二個位置塊
location /images/ { root /data; }
??對于以/images開始的請求將會有一個匹配(location /當然也配置這些請求,但是這是更短的前綴)
??server塊的的配置結果應該如下:
server { location / { root /data/www; } location /images/ { root /data; } }
??這已經是一個監聽80端口的工作服務器的配置了,并且可以通過本地機器的上的http://localhost/接入。響應以/images/開頭的URI請求,服務器會從/data/images文件夾下發送文件。例如,響應http://localhost/images/example.png的請求,nginx會發送/data/images/example.png文件。如果這樣的文件沒有找到,那么nginx會響應指示的404錯誤。沒有以/images/開頭的URI請求將會匹配到/data/www目錄。例如,響應http://localhost/some/example.html的請求,nginx會發送/data/www/some/example.html文件。
??為了讓新的配置生效,啟動nginx如果還沒有啟動,如果啟動了就執行reload命令:nginx -s reload
??以防事情沒有像預期那樣工作,你可以試著在access.log和error.log找原因,文件在/usr/local/nginx或者/var/log/nginx
??nginx使用最頻繁之一的就是把它設置為代理服務器,這也就意味著服務接收請求,并把他們傳遞到代理服務器,然后從代理服務器取回響應并發送到客戶端。
??我們將配置一個基本的代理服務器,它使用本地目錄中的文件來處理圖像請求,并將所有的請求發送到一個代理服務器。在這個示例中,兩個服務器都定義在一個nginx實例。
??首先,通過在nginx配置文件中添加一個包含如下內容的Server塊來定義代理服務器
server { listen 8080; root /data/up1; location / { } }
??這將是一個監聽8080端口的簡單的服務器(很明顯,由于使用了標準的80端口,所以listen指定沒有被指定)并且將所有的請求映射到本地的/data/up1/目錄。創建這個目錄然后把index.html文件放到這個目錄下。注意的是root指令被放在了server內容里。當為處理請求選定的location塊不包括自己的根指令的時候,使用這樣的root指令。
??下一步,使用上一小節的服務器配置塊并將其修改為代理服務器配置。在第一個location塊中,將proxy_pass指令和帶有代理服務器協議,名稱,端口號的參數放在一起。
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
我們會修改第二個location塊,即當前帶有/images/為前綴的請求映射到/data/images/目錄下的文件。為了讓它匹配帶有特殊文件擴展名的圖片請求,像下面這樣修改location塊
location ~ .(gif|jpg|png)$ { root /data/images; }
??這個參數是一個匹配所有以.gif,.jpg,或者是.png結尾的URI的正則表達式。所有的正則表達式都應該以~開始。符合響應的請求將會映射到/data/images/文件夾。
??當nginx選擇一個location塊去處理一個請求的時候,它首先要檢查指定前綴的location指令,用最長前綴記住位置,然后檢查正則表達式。如果有匹配的正則表達式,nginx會挑選這個位置,否則的話會選擇之前記住的一個。
??一個代理服務器的配置結果像這樣
server { location / { proxy_pass http://localhost:8080/; } location ~ .(gif|jpg|png)$ { root /data/images; } }
??服務器會過濾以.gif,.jpg,.png結尾的請求并且映射到/data/images/文件夾下面(通過添加root指令的URI參數),然后將其他的請求分配給上面配置的代理服務器。
??為了使新的配置文件生效,發送relaod信號給nginx
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40057.html
摘要:是至今為止見過最好的入門文章。采取基于事件的模型和依賴的機制,在多個子進程之間高效的分配請求。默認情況下,這個配置文件通常命名為并且會放置在,,或者。 本文屬于翻譯文章,原文鏈接為 nginx Beginner’s Guide。是至今為止見過最好的 nginx 入門文章。額。。。沒有之一。 這篇教程簡單介紹了 nginx 并且講解了一些 nginx 可以解決的簡單任務。這里,我們假設 ...
閱讀 1303·2021-11-11 10:57
閱讀 3717·2021-09-07 10:10
閱讀 3442·2021-08-03 14:03
閱讀 3067·2019-08-30 13:45
閱讀 681·2019-08-29 11:19
閱讀 1039·2019-08-28 18:07
閱讀 3100·2019-08-26 13:55
閱讀 809·2019-08-26 12:17