這篇手冊簡單介紹了nginx,並提供了一些能夠操做的簡單的工做。前提是nginx已經被安裝到你的服務器上。若是沒有安裝,請閱讀上篇:nginx 學習筆記(1) nginx安裝。這篇手冊主要內容:1. 如何啓動和中止nginx,如何加載nginx配置;php
2.配置文件的結構;3.如何安裝nginx來作靜態內容的服務器;4,如何配置nginx做爲代理服務器;5:如何鏈接FastCGI應用。html
nginx有一個主進程和多個工做進程。主進程的做用是讀和驗證配置文件,啓動工做進程。工做進程正在處理請求。nginx應用事件驅動模型和os依賴機制來在工做進程之間有效的分發請求(負載均衡)。工做進程的數目定義在配置文件中,在一個特定的配置中通常是固定的或者能夠根據可用的cpu 內核來動態修改這個數量。工做進程參考:http://nginx.org/en/docs/ngx_core_module.html#worker_processesnginx
nginx及其模塊如何工做取決於配置文件的定義。默認狀況下,配置文件爲:nginx.conf
and 目錄爲/usr/local/nginx/conf
, /etc/nginx
, 或者/usr/local/etc/nginx
.web
啓動、中止、從新加載ngnix配置文件正則表達式
啓動nginx,直接執行可運行文件便可。一旦nginx啓動完成,能夠經過可運行參數s來控制nginx的運行。編程
語法以下:服務器
nginx -s signal
signal可選項併發
stop
— 快速中止quit
— 完整中止reload
—從新加載reopen
— 從新打開日誌文件例如,中止nginx但等待工做進程處理完成當前的請求,可使用下面的命令:負載均衡
nginx -s quit
注意:這個命令的執行者必須是和啓動nginx的是同一個用戶。框架
直接修改配置文件將不會當即生效,須要重啓nginx或者向nginx發送reload配置文件命令:
nginx -s reload
當主進程收到從新加載配置的信號後,它先檢測新配置的語法是否規範,而後開始嘗試加載新的配置。若是上面的步驟成功,主進程開始啓動新的工做進程而且發中止信號給舊的工做進程;不然,主進程回滾到改變前的配置,並繼續使用舊的配置工做。舊的工做進程接受到中止工做信號,它中止接受新的鏈接請求,但繼續處理當前的請求知道這些請求被處理完成。最後,舊的工做進程退出。
nginx進程也能夠經過unix工具進行處理,例如kill命令。unix工具能夠經過進程ID做爲參數來進行處理。默認狀況下,nginx主進程的id寫入/usr/local/nginx/logs或者/var/run文件中。例如,若是主進程的id是1628,發送quit信號將會使nginx完整退出,命令以下;
kill -s Quit 1628
一樣,也能夠功過ps命令來獲取nginx運行的全部進程列表,例以下面的方法:
ps -ax | grep nginx
想獲取更多nginx信號的信息,請參考下一篇:nginx控制。
配置文件的結構
ngnix的配置包含了許多模塊,每一個模塊使用指令來運行。指令包含簡單指令和塊指令。簡單指令經過空格來分離名稱和參數,使用分號(;)做爲結尾;塊指令和簡單指令有相同的結構,但不是以分號結尾而是以大括號({})包含指令。若是一個塊指令中大括號內含有其它指令,那麼括號內的叫作上下文(例如:事件、http、服務器、位置)。
在配置文件中,不在任何上下文的指令被認爲存在於主上下文。事件和http指令就存在於主上下文中,server在http上下文中,位置在server上下文中。
配置文件使用#號做爲註釋符號。
爲靜態文件提供服務
一個web服務器的重要工做就是爲靜態文件服務。例如,你想根據請求的不一樣,去不一樣目錄去請求服務:/data/www存放html文件,/data/images存放圖片信息。這就須要修改配置文件,創建一個服務器塊,在這個http塊中創建服務器塊,服務器塊內再創建兩個不一樣的位置塊。
首先,建立/data/www目錄並把一個包含任意內容的index.html文件放入該目錄;建立/data/images目錄,放置一些圖片。
而後,打開配置文件。默認配置文件中已經包含了一些server塊的實例,大部分被註釋掉了。如今註釋掉全部的相似塊,新寫一個server塊:
http { server { } }
一般,配置文件可能會包含幾個server塊,server一般指定名稱和監控端口。當nginx決定哪一個server進程處理請求時,它測試uri請求報文頭而不是定義在server塊中的位置指令的參數。
增長下面的位置塊到服務器塊中:
location / { root /data/www; }
位置包括中定義的「/」前綴和請求uri進行比較。若是和uri中請求匹配,uri將增長root指令的路徑到uri中,亦即到本地文件系統的路徑/data/www下去響應請求。若是有多個位置塊匹配,nginx選擇最長後綴的那個。以上的位置塊提供了最短的前綴(長度爲1),所以當只有全部別的位置塊都不能提供匹配時,這個模塊才能使用到。
接下來,增長第二個位置塊:
location /images/ { root /data; }
它將匹配以/images/開頭的請求(位置「/」也匹配這些request,但它的前綴更短)。
上述完整的配置以下:
server { location / { root /data/www; } location /images/ { root /data; } }
上述已是一個能夠運行的服務器的配置了,該服務器監聽http標準端口80,能夠經過htt://localhost/來訪問本地機器。若是請求以/images/開頭,那麼該服務器將從目錄/data/images/下獲取文件來應答請求。例如:請求http://localhost/images/example.png發送後,nginx將發送/data/images/example.png文件應答請求。若是該文件不存在,nginx將發送404返回。不是以/images/開頭的請求將會被映射到/data/www目錄下。例如:對於請求http://localhost/some/example.html請求,nginx將會發送/data/www/some/example.html文件來應答。
爲使新的配置生效,若是nginx沒有啓動,則啓動,若是啓動則發送從新加載信號到nginx主進程,執行:
nginx -s reload
若配置沒有生效或者沒有達到指望效果,能夠經過目錄/usr/local/nginx/logs或者/var/log/nginx下的access.log和error.log來查找緣由。
建一個簡單的代理服務器
nginx另外一個頻繁使用的特性是做爲一個簡單的代理服務器,代理服務器意思就是接受請求,併發送這些請求到被代理的服務器,從代理的服務器獲得響應信息,而後發送給客戶端。
下面介紹配置一個簡單的代理服務器的例子,這個代理服務器提供從本地機器獲取圖片請求,而後發送到別的其它的被代理服務器。在這個例子中,全部的服務器都定義在一個單獨nginx實例。
首先,定義被代理服務器,這能夠經過在配置文件中增長一個或者多個服務器塊,具體內容以下:
server { listen 8080; root /data/up1; location / { } }
這個簡單的服務器監聽端口8080(上個例子中沒有使用listen是由於使用http標準端口80),映射全部的請求到本地文件系統的/data/up1目錄,建立此目錄並放置index.html文件到該目錄。注意root指令被放置到服務器上下文。當選擇提供服務的位置塊不包含本身的root指令時該root指令將被使用。
接下來,使用上篇服務器的配置並修改,使之成爲一個代理服務器的配置。在第一個位置塊中,在第一行的參數中添加proxy_pass指令加代理服務器的協議、名稱、端口。(在咱們的例子中是http://localhost:8080):
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
咱們將修改第二個位置塊的配置,之前是映射/image/前綴的請求到/data/images/目錄下的文件,爲了和典型圖片的文件擴展名相匹配,修改的位置塊配置文件以下:
location ~ \.(gif|jpg|png)$ { root /data/images; }
這個參數是一個正則表達式,它匹配以.gif,.jpg或者.png結尾的url。一個正則表達式應該以~開頭。響應的請求將被映射到/data/images目錄。
當nginx選擇一個位置塊爲請求提供服務時,它首先檢測指定帶前綴的位置指令,別忘記優先選擇最長前綴的,再檢測正則表達式。若是和一個正則表達式匹配,nginx選擇這個位置塊,不然選擇最初的那個。
完整的代理服務器配置以下:
server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
這個服務器將過濾以以.gif,.jpg或者.png結尾的請求,而後映射到目錄/data/images
下(經過增長url到root指令參數),轉發其它請求到配置的被代理服務器中。
更多用來配置代理鏈接的指令能夠參考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html
創建FashCGI代理
nginx能夠用來追蹤到FastCGI 服務器上的請求,FastCGI服務器能夠運行不一樣框架不一樣編程語言(例如php)構建的應用程序。
適用FastCGI服務器運行的nginx最基本配置包括:使用fastcgi_pass指令而非proxy_pass;fastcgi_param指令設置發送參數到Fastcgi服務器。假定能夠經過http://localhost:9000來訪問FastCGI服務器。使用上章的代理服務器配置,替換proxy_pass指令爲fastcgi_pass指令並改變參數到localhost:9000.對於PHP,SCRIPT_FILENAME參數用來決定腳本名稱,QUERY_STRING參數用來傳送請求參數,完整配置以下:
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; } }
這將創建一個服務器,該服務器追蹤到被代理的服務器的全部請求(靜態圖片除外),這個服務器使用FastCGI協議經過localhost:9000來操做。