nginx新手指引--文件翻譯
官方文件源地址:http://nginx.org/en/docs/beginners_guide.html
目錄
nginx有一個主程序(master process)和很多個工作程序。主程序是讀取並評估(evaluate)配置,控制工作程序。工作程序處理請求。nginx是採用基於事件的模型。獨立於作業系統的機制,來高效的分發請求。工作程序的數量在配置檔案中有定義,它可以根據CPU核心數量自適應。
nginx和其模組的工作方式是由配置檔案來決定的。預設情況下配置檔案在
/usr/local/nginx/conf,
/etc/nginx,
/usr/local/etc/nginx
以上三個目錄中的一個,其檔名預設為nginx.conf
開啟,停止,重新載入配置
通過執行可執行檔案來開啟nginx。可通過 -s 引數呼叫可執行檔案,語法如下:
nginx –s signal
其中signal可為如下命令:
stop:快速關閉
quit:優雅的關閉,
nginx –s quit
會等待工作程序完成當前請求,然後再關閉(該命令應該由開啟nginx的使用者執行)
reload:重新載入配置檔案
nginx –s reload
改變配置檔案是不會立即生效的,需要執行reload命令,或者重啟nginx
reopen:重新開啟日誌檔案
一旦主程序接收到reload配置的命令,它會做兩件事:1,檢查新配置檔案的語法是否正確有效,2. 應用新的配置。如果以上兩步成功,則主程序開啟新的工作程序併發送訊息給舊工作程序讓其關閉。(當工作程序接收到shut down的命令時,它會停止接收新的連線,並將當前所有請求執行完畢,然後退出程序。)如果以上兩步報錯,則主程序回退原來的改變,繼續原配置執行。
結束nginx程序的另一種方式,可藉助於Unix工具的kill命令。在這種情況下,結束訊號將直接把ngnx程序ID傳送給Unix程序處理。nginx的程序ID(nginx.pid)預設情況下在/usr/local/nginx/logs或者/var/run目錄下。舉個例子,如果主程序ID是1628,那麼就執行
kill –s QUIT 1628
使用ps命令可獲取所有執行的nginx程序,例如:
ps –ax | grep nginx
配置檔案的結構
nginx有許多模組構成,這些模組在配置檔案中都有指定的指令控制。這些指令分為簡單指令和塊指令。詳見配置。
提供靜態內容
一個重要的WEB伺服器功能就是提供檔案,例如圖片,靜態html頁面。你可以通過編輯配置檔案實現。
舉個例子:
1. 你先建立一個資料夾,路徑為/data/www,放置一個index.html檔案。然後建立一個/data/images路徑,然後放一些圖片在images資料夾內。
2. 開啟配置檔案,在預設配置檔案的
http {
server {
#這裡面
}
}
對location進行修改。
配置檔案修改如下:
location / {
root /data/www;
}
location /images/ {
root /data;
}
3. 執行
nginx –s reload
4. 驗證
訪問靜態頁面時:
開啟瀏覽器,輸入http://你的公網IP /hello.html ,即可成功訪問
訪問圖片時:
開啟瀏覽器,輸入http://你的公網IP /images/2.gif ,即可出現對應圖片
訪問過程:
其實瀏覽器中輸入的Url, 在nginx中會先取到公網IP,再取到IP後面的路徑,然後匹配location中的路徑。
怎麼匹配呢?
將輸入URL的路徑與配置檔案中location後面的路徑匹配。例如我取到輸入url 是http://localhost/images/example.png,那麼nginx會在路徑中匹配到/image/ ,然後在匹配到的路徑前加上對應的root值,則實際訪問URL為http://localhost /data/images/example.png。
當所有location後面的路徑都無法匹配輸入URL的路徑時,則使用location後面的路徑為/的root值。例如,輸入URL是http://localhost/some/example.html時,實際訪問的路徑時http://localhost/data/www/some/example.html
建立一個簡單的代理伺服器
這是nginx最頻繁使用的一個功能。它起到的作用是:接收請求,轉發到對應的原始伺服器,獲得對應響應,併發送至客戶端。
舉個例子,配置一個基本的代理伺服器,作用是提供一些圖片等靜態檔案並轉發請求到伺服器
1. 在伺服器新增/data/upl路徑,並新增index.html頁面
2. 配置原始伺服器。在nginx配置檔案中新增server塊指令及其內容。
server {
listen 8080;
root /data/upl;
location / {
}
}
修改原來的server中的location引數,
location / {
#root /data/www;
proxy_pass http://127.0.0.1:8080/;
}
location ~\.(gif|jpg|png)$ {
root /data/images;
}
3. 儲存,並執行
nginx -s reload
4. 驗證
瀏覽器中訪問http://公網IP:8080或者http://公網IP:8080/index.html
nginx的工作過程:
nginx伺服器監聽80埠,當請求是圖片檔案時,則nginx的工作為提供靜態資源,其他的請求則轉發給伺服器的8080埠處理。伺服器8080埠,接收轉發來的URL並在路徑前加上root值,這就是實際訪問的URL。然後location中路徑的匹配,加上location的root值,等等同之前的一樣。
建立FastCGI代理
nginx可以轉發請求到FastCGI伺服器。FastCGI伺服器上面執行著由各種框架和程式語言編寫的應用。
和FastCGI搭配的最基本nginx配置:使用fastcgi_pass指令而不是proxy_pass;fastcgi_param指令用來設定傳遞到FastCGI伺服器的引數。
假設FastCGI伺服器是監聽的本地9000埠。則修改原來的server中的location引數,如下
server {
location / {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
其中,SCRIPT_FILENAME在PHP中用來描述指令碼名,QUERY_STRING用來傳遞請求引數。
修改後,依然執行
nginx –s reload
這樣nginx會通過FastCGI協議轉發所有非靜態圖片的請求到9000埠,為所有靜態圖片的請求提供資源。