Nginx 新手配置引導

Fjun發表於2017-04-27

今天在學習大資料方面的知識,聽說Nginx在有些方面比Apahce好,但是也不知道是哪裡好,於是,去官網看看吧。作者是俄國人,自然有俄文,中俄關系這麼好,應該也有中文吧!呀呵,沒有中文啊,咋整呢?
翻譯吧!當然,我也不懂俄文,還好他們有英文版的,OK了,那就試試翻譯一下英文,大家試試看咋樣,行不?
源文出處:
http://nginx.org/en/docs/beginners_guide.html

Beginner’s Guide(新手導引)

nginx啟動時有一個主程式(master process)和一些工作程式(work process)。主程式一般用來讀取和檢測維護配置資訊,管理工作程式。而工作程式才是實際做事處理客戶端請求的傢伙。
nginx使用基於事件的模型和作業系統平臺依託的機制來有效地分發客戶端的請求給工作程式。
工作程式的數量可以在配置檔案設定中,也可以根據既定的配置項來修正,或者也可以根據實際CPU核數進行自適應調整
nginx的工作方式和模組情況取決於它的配置檔案nginx.conf,而它的配置檔案一般在/usr/local/nginx/conf,/etc/nginx或者/usr/local/etc/nginx目錄裡

啟動,停止,重讀配置資訊

要啟動nginx,只需執行安裝時自帶的可執行檔案就行了。

/usr/sbin/nginx

一旦啟動了nginx,就可以透過呼叫可執行檔案並加上引數來控制

/usr/sbin/nginx -s signal

signal引數有:

stop 快速停止
quit 優雅(從容)地停止
reload 重讀配置資訊(平滑重啟)
reopen 重開日誌檔案

比如,當你想在當前的工作程式(work process)處理完手上的請求後關閉nginx,那麼你可以使用下面的命令

/usr/sbin/nginx -s quit

注意,執行這個命令的使用者要和啟動nginx的使用者是同一個。
如果你修改了配置資訊,你必須重啟nginx或者重讀配置資訊才能使得剛剛修改的配置生效,重讀配置資訊,就執行下面的命令

/usr/sbin/nginx -s reload

一旦主程式接收到上述訊號,則會嘗試解析配置檔案的語法並讀取配置資訊,如果執行成功,主程式會生成新的工作程式並向舊的工作程式傳送停止訊號。如果執行失敗,則主程式回滾配置資訊,原有的工作程式繼續工作。工作程式在接收到主程式的停止訊號後,不再接收新的連線但是會把手上的請求處理完後才停止。

在類Unix系統平臺上也可以透過kill命令向nginx傳送類似的訊號,這時的訊號一般是直接傳送給nginx程式,用程式ID來表示。nginx的主程式ID一般是寫在nginx.pid檔案中,所在目錄可能是/var/run/(可配置)。比如當前nginx主程式的程式ID是1628,那麼如果我想從容停止掉nginx,那麼我應該這麼做:

kill -s QUIT 1628

快速地停止nginx:

kill -s TERM 1628

平滑地重啟nginx:

kill - HUP 1628

為了獲得當前執行的nginx的程式的資訊,可以執行下述的命令:

ps -ax | grep nginx

更多資訊還是參考Nginx程式控制

配置檔案的結構

nginx也是基於模組的,而模組的功能在配置檔案中就是所謂的指令(directive)了。
指令包含簡單指令和塊級指令。

簡單指令就是指令名和指令值,中間用空格隔開,使用分號(;)結束。

塊級指令的結構與簡單指令一樣,只是不是使用分號(;)結束,而是使用大括號({})結束。如果塊級指令還能在大括號裡包含簡單指令,那麼此時的塊級指令也有另一個稱謂:上下文(比如events,http,server和location)。

處在配置檔案裡,塊級指令之外的環境稱之為主上下文(main context)或者叫根上下文。比如events和http指令是處在主上下文裡的,而server指令是處在http上下文裡中,而location指令又是處在server上下文裡中。

主(根)上下文
http{
    server{
       location {
       }
    }
}

#(中文不知怎麼稱呼)字元後的都是註釋。

處理靜態內容

Web伺服器的一項重要功能就是處理靜態資源(圖片和靜態HTML文字),實現這個也非常的簡單:根據HTTP請求,nginx會指定的資源比如/data/images目錄下的圖片和/data/www/目錄下的html檔案取出來交給客戶端。而nginx配置也非常簡單,只需在http配置塊的server塊下,編寫兩個location塊就可以了
首先,讓我們建立/data/www目錄,然後在這個目錄下建立index.html檔案,裡面隨便寫點什麼內容,比如Hello LiuShiFu.
建立一個/data/images目錄,裡面放一些圖片。
然後,讓我們開啟配置檔案。檔案中預設是有幾個server塊的配置的,且大部分是被註釋掉的。現在我們把那些server都註釋掉,重新在http塊下配置一個server塊。

http{
    server{
    }
}

一般來說,配置檔案會根據監聽埠號或者主機名分為幾個server塊,而nginx到底把http請求交給哪個server處理,則是根據請求的URI和server裡location指令的值的匹配來處理的。下面我們新增一個location

http{
    server{
        location / {
            root /data/www;
            }
    }
}

上述location的"/"字首,是用來匹配http請求URI的。而它會新增到root指定的路徑下,也就是/data/www,以此來形成請求資源(檔案)和本地檔案系統的對應。如果有多個location和URI匹配的話,那就優先選擇最長匹配的location。我們寫的location只提供了最短的字首,長度為1。所以,只有其他location匹配失敗的情況下才能使用這個location。現在,我們再新增一個location

http{
    server{
        location /images/ {
            root /data;
            }
    }
}

上述的location將會匹配一個以/images開始的http請求(location / 也會被匹配但是它是最短的,忽略之)。配置好後,是類似下面的內容

http{
    server{
        location / {
            root /data/www;
            }
        location /images/ {
            root /data;
            }
    }
}

現在我們成功地配置了一個server塊,監聽在80埠,可以透過http://localhost試試。比如訪問http://localhost/images/a.png,Web伺服器將會把/data/images/a.png響應給客戶端,如果該檔案不存在,則返回404 Error.如果URI不是/images/這樣的,那就對映到/data/www目錄,比如訪問http://localhost/some/example.html,Web伺服器將會把/data/www/some/example.html響應給客戶端。
修改nginx配置檔案之後,記得讓主程式重新讀取配置檔案才能生效

nginx -s reload

如果出錯的話,記得檢視access.log和error.log日誌。日誌目錄一般在/usr/local/nginx/log/或者/var/log/nginx/裡。

配置代理伺服器

(下回再說)

本作品採用《CC 協議》,轉載必須註明作者和本文連結
每一天都要進步一點點!

相關文章