今天下午沒有太多的事。就翻譯了nginx官方的文章,比較倉促。語言上沒有怎麼雕琢。我會逐步完善。歡迎你們指正。
問號部分由於本人詞窮,一時不知道用漢語表達,因此先空着。(手指骨折,單手打字,熬了好幾個小時,因此文字漏洞應該比較多,找個時間再優化吧!)。
nginx官網文章地址:http://nginx.org/en/docs/begi...。php
這個指導對nginx作了一個基礎的的介紹和用nginx能夠作的一些簡單的任務,確保讀者的的機器上已經安裝了nginx,若是沒有安裝,請看安裝nginx頁面,這個指導描述了怎樣開啓,關閉和重啓它的配置,解釋配置文件的結構和描述怎樣配置nginx的非靜態服務,怎樣配置nginx做爲一個代理服務器和怎樣把nginx與fastcgi應用鏈接起來。html
nginx有一個主進程和一些worker進程,主進程的主要目的是讀取和執行配置和確保worker進程正常運行,worker進程處理真實的請求,nginx僱傭event-based模式和系統獨立的機制去有效分發請求給worker進程。worker進程的數量被定義在配置文件中和被設置好的配置文件,或者自適應cup的核數。nginx
nginx的工做方式和模塊被肯定在配置文件,配置文件的的默認是名字是nginx.conf,放在/usr/local/nginx/conf, /etc/nginx, 或者/usr/local/etc/nginx目錄下。web
運行可執行的文件,開啓nginx,一旦nginx被開啓,nginx經過可執行 -s parameter 控制。用如下的語法:正則表達式
nginx -s singal數組
如下是能夠用到的信號:服務器
stop -快速關閉nginx框架
quit - 平滑的關閉nginx
reload - 從新加載配置文件
reopen - 從新打開日誌文件ide
好比,中止worker進程去結束正在服務的外部請求。如下的命令能被執行:工具
nginx -s quit
注:這個命令的執行應該與開啓nginx的用戶是同一用戶
被改變配置文件只有到從新加載配置後才能被應用,重啓配置,執行如下命令:
nginx -s reload
一旦主進程收到重啓配置的信號,nginx會檢查新配置文件的語法的正確性和試着應用被提供的配置,若是成功,主進程會開啓新的worker進程和發送一下信息到老的worker進程,要求老的worker進程關閉,不然,主進程將會回滾到改變前的配置和繼續用老配置執行。老worker進程收到關閉的命令,中止接受新的鏈接和繼續執行當前的請求直到全部的的請求被執行完畢。以後,老的worker進程退出。
對nginx進程發送的信號也可用unix工具的幫助。好比kill工具。這類信號被直接發送到一個被給定的進程ID的進程。nignx主進程的進程ID被默認寫到nginx.pid文件中。此文件在/usr/local/nginx/logs 或者/var/run文件下。例如,若是主進程ID是1628,對nginx發送Quit信號關閉nginx。執行如下命令:
kill -s Quit 1628
獲取全部正在運行的nginx進程,能夠用ps工具,好比,用如下方式:
ps -ax | grep nginx
想要獲取發送到nginx的更多信號,請看controller nginx
配置文件的結構
nginx是由在配置文件中被特定的指令控制的模塊組成的。指令被劃分紅一些簡單的指令和指令模塊。一個簡單的指令是由名字和以空格分離的參數組成,以」;」結尾。指令塊有一樣結構做爲一個簡單的指令。可是代替「;」,指令塊是用」{}」結尾的。若是一個指令塊內部有其餘的指令。它被叫作context(例如:events,http,server,location)
運行靜態內容
web 服務器的一個重要的任務是運行文件(好比 圖片或者靜態html頁面)。你能夠實現一個例子,經過一個請求。文件將會經過不一樣的本地文件夾分發運行:/data/www (可能包括html文件) and /data/images (包含圖片)。這要求編輯配置文件和etting up of a server block inside the http block with two location blocks.
首先,創建/data/www目錄,而且放一個index.html文件(能夠寫入任何內容)在目錄下,創建/data/images目錄來存放圖片。
下一步,打開配置文件,默認的配置文件已經包括了幾個server塊,大部分已經註釋了,如今註釋全部的區塊而且開始建立一個新的sever塊。
http { server { } }
一般,配置文件可能包括多個server,這些server能夠經過監聽的端口和server_name區分開。一旦,nginx肯定是哪一個server來處理request ???????
添加如下location區塊到sever區塊中:
location / { root /data/www; }
以上的location塊指定"/"前綴與來自於request中的url作對比,對於匹配上的request,url將被添加到root指令指定的路徑上去,這裏是/data/www, ????。若是匹配上了好幾個location區塊,nginx將選擇最長的那個前綴,長前綴location的優先級在最短前綴之上,因此若是所得的loaction區塊都匹配失敗,那麼最短的loaction區塊將被使用。
下面,添加第二個location區塊:
location /images/ { root /data; }
想要全部的請求匹配上/images/(loaction / 也能夠匹配上全部的request,可是它有最短的前綴)
配置文件的最終樣子應該像這樣:
server { location / { root /data/www; } location /images/ { root /data; } }
這已經有一個監聽標準80端口的服務器配置和一個能夠經過http://localhost/訪問的本地機器。對於以/images/開始的url的request的響應,服務器將發送來自/data/images目錄下的文件。好比,對於http://localhost/images/examp...請求的迴應,nginx將發送/data/images/example.png文件。若是文件不存在,nginx將發送404錯誤的迴應指示。沒有以/images/開始的url請求將被映射到/data/www目錄下,例如,對於http://localhost/some/example...的請求,nginx將發送/data/www/some/example.html文件做爲迴應。
爲了使用新的配置文件,啓動還有啓動的nginx服務,或者經過執行如下命令發送reload信號到nginx的主進程中:
nginx -s reload
在一些狀況下,nginx不能工做,你能夠試着在 /usr/local/nginx/logs或者/var/log/nginx目錄下的access.log和error.log日誌文件中找出緣由
nginx中最經常使用的一個是功能是把nginx做爲代理服務器,這意味着一個服務器接收request,把request傳給給代理服務器,從代理服務器回收響應信息,而後將這些信息發送給客戶端。
咱們將配置一個基礎的代理服務器,它用於處理圖片請求(圖片來自本地目錄)和發送全部其餘的request到代理服務器。在這個例子中,兩個server將被定義到一個單獨的nginx實例。
首先,經過添加一個sever塊到nginx配置中來定義proxy server,配置文件內容以下:
server { listen 8080; root /data/up1; location / { } }
這個簡單的server監聽的是8080端口,而且映射全部的請求到/data/up1目錄下。建立/data/up1目錄,並將index.html文件放到這個目錄中,要注意的是root指令要放到server代碼塊中,???。
下一步,用以前的server配置,把sever配置修改爲一個proxyserver配置。在第一個location塊中,?用proxyserver指定的參數填充proxy_pass指令(在咱們這個例子中,是http://localhost:8080)
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
咱們將修改第二個loaction塊,它把帶有 /images/ 前綴的請求映射到到/data/images目錄下,爲了匹配帶有特殊擴展名的圖片請求,修改的location應該像這樣:
location ~ \.(gif|jpg|png)$ { root /data/images; }
這個參數是一個匹配全部以.gif,.jpg,.png結尾url的正則表達式。正則表達式應該優先於~匹配。符合的請求將被映射到/data/images目錄下。
當nginx選擇一個loaction去處理一個請求,它首先會檢查指定前綴的loaction指令,記憶最長前綴的loaction,而後檢查正則表達式。若是匹配到正則表達式,nginx選擇這個loaction,??
最終的proxy server配置文件應該是這樣的:
server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
這個server過濾以.gif, .jpg, .png 結尾的請求,而後將他們映射到 /data/images目錄下,把他的請求傳給上面配置我呢間中的proxy server。
爲了應用新的配置文件,爲了說明前面的描述,發送reload信號給nginx
這還有不少被用於配置proxy鏈接的指令 more
nginx被用於指定request到用各類框架和例如php語言的程序的fastcgi服務器。
大多數基本的fastcgi的nginx配置用fastcgi_pass指令代替了proxy_pass 指令,而且fastcgi_param設置參數發送到fastcgi服務上,假設fastcgi服務是能夠經過localhost:9000能夠訪問的,把前面內容的proxy配置文件做爲一個基礎。用fastcgi_pass指令代替proxy_pass 指令,而且設置proxy_pass爲localhost:9000,在php中,SCRIPT_FILENAME 參數被用於肯定腳本名稱,QUERY_STRING 參數被用於傳遞request參數,最終的配置文件應該是:
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; } }
這個配置文件將把全部請求(除了靜態圖片的request)經過fastcgi協議 打到運行localhost:9000的代理服務器