翻譯 nginx入門指引(一)

2021-09-20 03:01:58 字數 4303 閱讀 4178

興趣使然的翻譯,業餘水平,nginx官方英文介紹文件很不錯,可惜中文網上好像沒有相應的翻譯。

啟動,停止和過載配置

配置檔案的結構

服務靜態內容

建立簡單的**伺服器

建立fastcgi**

這個指引對nginx做了一些簡單的介紹並且描述了一些它可以完成的簡單任務。我們假定讀者已經安裝了nginx,如果沒有的話,請看安裝nginx頁面。這個指引描述了如何啟動和停止nginx,以及過載它的配置、解釋了配置檔案的結構以及如何讓nginx服務靜態內容、如何配置nginx使之成為**伺服器、和如何用將它和乙個fastcgi的應用連線起來。

nginx有乙個主程序和若干個工作程序。主程序的主要目的是讀取和分析配置檔案以及管理工作程序。工作程序處理實際的請求。nginx使用了基於事件的模型和作業系統依賴型的機制來有效地向工作程序分發請求。工作程序的數量由配置檔案定義,也可以通過修改乙個給定的配置檔案中來改變,或者自動地根據cpu的核數進行調整(詳見工作程序)

nginx和它的模組們的工作方式由配置檔案決定,預設情況下,配置檔案名叫nginx.conf,它被放置在/usr/local/nginx/conf,/etc/nginx 或 usr/local/etc/nginx 目錄下。

執行可執行檔案來啟動nginx。一旦nginx被啟動,它可以通過呼叫帶 -s 引數的可執行命令被控制。使用如下語法:

nginx -s signal

其中,signal 可以是以下幾種之一:

例如,當需要等待工作程序處理完當前請求時才關閉nginx,可以使用以下命令:

nginx -s quit

這個命令應該由啟動nginx的使用者執行

對配置檔案的更改不會立即生效直接到reload命令被執行或者nginx被重啟。執行reload命令:

nginx -s reload

一旦主程序收到過載配置檔案的訊號,它會檢查新配置檔案的語法並嘗試應用其中的配置。如果應用成功了,它會啟動新的工作程序並且傳送關閉的請求給舊的工作程序;否則,主程序回滾修改並且繼續使用舊的配置工作。舊的工作程序收到關閉的命令後,停止接收新的連線並繼續服務當前的請求直到所有這樣的請求都被服務。然後,舊的工作程序就會關閉。

乙個訊號也可以通過unix工具被傳送給nginx的程序,比如kill。在這種情況下,乙個訊號通過乙個程序id直接被傳送給程序。預設情況下,nginx的主程序id被記錄在 /usr/local/nginx/logs 或 /var/run 目錄下的nginx.pid檔案裡。例如,如果主程序id是1628,為了傳送quit訊號使nginx平穩關閉,可以執行:

kill -s quit 1628

為了獲得所有執行中的nginx程序的列表,可以使用ps命令,例如:

ps -ax | grep nginx

更多的關於傳送訊號的資訊,參加控制nginx

nginx包含一些被配置檔案中的指令控制的模組。指令被分為簡單指令和塊級指令兩種。乙個簡單指令包含了由空格分開的名稱和引數,並且以分號結尾。乙個塊級指令和簡單指令有一樣的結構,但它不使用分號結尾而使用一些被包圍的額外結構來結尾。如果乙個塊級指令中包含了其它指令,那麼它被稱為乙個上下文。比如events,http,server和location

#號後的內容是注釋

web伺服器的乙個重要任務是對外輸出檔案,比如和靜態網頁。你會實現乙個這樣的例子:根據不同的請求,檔案會從不同的本地目錄,如: /data/www (html) 和 /data/images 被輸出。這需要修改配置檔案並且在http塊指令中建立帶有兩個location塊的server塊。

首先,建立/data/www的目錄並且放置乙個index.html的檔案,然後建立/data/images目錄並放置一些

接下來,開啟配置檔案。預設的配置檔案中已經包含了幾個server塊指令的例子,其中大多數被注釋掉了。現在,注釋掉所有這樣的塊指令並且建立乙個新的server塊指令。

}通常乙個配置檔案會包含若干個server塊,並通過他們監聽的埠和他們的服務名稱來區分。一旦nginx決定了那個由哪個server來處理乙個請求,它就會檢驗請求頭部的uri並用location指令的引數和其對比,location塊被定義在server塊中。

location /
這裡location塊宣告了乙個"/"字首來和請求中的uri進行對比。對於成功匹配的請求,uri會被新增到root指令宣告的路徑後面,形成乙個在本地檔案系統中對於所需檔案的請求。如果有多個匹配的location塊,則nginx選擇最長字首的那個。以上的location塊的字首只有乙個字元,是最短的,因此只有當其它location都匹配失敗時,這個location才會被選擇。

現在,新增第二個location塊:

location /images/
它會匹配以/images/開始的請求(location / 也會匹配這個請求,但它的字首更短)

現在,server塊指令看起來就像這樣

server 

location /images/

}

這個配置已經可以工作了,它監聽在標準的80埠上,並且可以在本機上通過http://localhost/訪問。為了響應以/images/開頭的uri,伺服器會從/data/images目錄中傳送檔案。比如:為了響應http://localhost/images/example.png,nginx會傳送/data/images/example.png這個檔案,如果不存在這樣的檔案,nginx就會傳送404錯誤。而不以/images/開頭的請求則被對映到/data/www目錄,比如:http://localhost/some/example.html被對映到/data/www/some/example.html檔案。

nginx乙個最常見的用途就是用作**伺服器,也就是把收到的請求傳遞給被**的伺服器,並從被**伺服器中取回響應,再將其傳送給客戶端。

我們會配置乙個基本的**伺服器,對於檔案的請求,從本地目錄中傳送檔案,而對於其它的請求,則把請求**給另乙個被**伺服器。在這個例子裡,兩個伺服器都會在乙個單一的nginx例項中被定義。

首先,通過新增乙個塊指令定義乙個被**伺服器:

server 

}

這是乙個監聽在8080埠的簡單伺服器(之前我們定義的server塊不宣告listen指令是因為使用了標準的80埠)並且會把所有請求對映到本地的 /data/upl 資料夾。建立這個資料夾並且放入乙個index.html檔案。注意,這裡的root指令被放在了server上下文中。當有乙個location被選擇了而它的內部卻沒有root指令時,它就會使用server中的這個root指令。

接下來,修改在前一節中的server配置使它變為乙個**伺服器的配置。在第乙個location塊中,新增proxy_pass指令,它的引數是被**伺服器的協議,名稱和埠。(本例中,引數是 http://localhost:8080):

server 

location /images/

}

location ~ \.(gif|jpg|png)$
這個引數是乙個匹配所有以.gif,.jpg或.png結尾的uri的正規表示式。~ 應該被寫在正規表示式前面。

當nginx選擇乙個location時,它先檢查字首,並且記錄匹配的location(最長字首),然後nginx再檢查正規表示式,如果有乙個正規表示式匹配,它就選擇這個location,否則,選擇之前記錄的location。

最終的**伺服器配置:

}現在,這個伺服器可以將以.gif,.jpg或.png結尾的請求對映到本機目錄,將其它所有請求傳送到被**伺服器。

為了使配置生效,要傳送reload訊號。

nginx可以用來把請求路由給fastcgi伺服器。fastcgi伺服器可以執行由多種框架和程式語言(如php)構建的應用。

最基本的配置方法是使用fastcgi_pass指令取代proxy_pass指令,並且用fastcgi_param指令設定引數。假設fastcgi伺服器可訪問路徑是localhost:9000,用前一節的**伺服器的配置作為基礎進行修改。在php下,script_filename 引數是用來指定指令碼名稱, query_string 是用來傳遞請求引數。改變結果如下:

}到此就建立了乙個fastcgi**伺服器,可以將靜態以外的請求通過fastcgi協議傳遞給被**伺服器 localhost:9000

機器學習入門指引《一》

機器學習,作為門時髦 熱門的計算機應用技術,特別是隨著深度學習的流行,推動 大資料 深度模型 的模式,為人工智慧和人機互動的發展提供巨大的空間。和資料探勘一樣,利用大量的資料分析建立有效的模型以便提供分類或者決策支援,機器學習也是利用經典的演算法 聚類,svm,神經網路,深度學習等 建立資料模型,不...

Zend Framework入門指引

安裝篇 windows平台 安裝tortoisesvn。tortoisesvn是svn在win下的客戶端。安裝tortoisesvn的目的是為了獲取最新的zf原始碼,如果你使用zend定期發布的zf的原始碼,可以跳過這一步。為zf新增路徑。編輯php.ini wamp的php.ini在apache ...

C 入門指引

1 語言書籍 c primer 第四版 c primer習題解答 2 gui c 方面的gui庫有很多種,比如mfc wtl wxwidgets qt。這些gui庫都各有自己的特點,其實我們只要先了解一種就可以了,只要深入了解了一種gui庫,需要的時候再學習其他的就夠了,本質上都差不多,很快就可以上...