Nginx 從入門開始的網站架設 (1):Ngnix 基本設定
最近有個案子,客戶覺得我們第一次交上去的壓力測試結果太狼狽,要我們想辦法把數字做得更好,他們提出的解決方式是負載平衡,多開了兩台 server 給我們自己設定。原本打算利用 windows 內建的 Network Load Balance(NLB)來進行設定,礙於網路管理的基礎知識不足,一直卡東卡西卡了兩天還是沒有頭緒 QQ
由於客戶退件到下一次審查的時間只有 7 個工作天,扣掉 PM 寫報告的一天、報告送印一天,實際研究時間,包含壓力測試總共只有 5 天……所以 NLB 研究了兩天之後果斷放棄,把時間壓在 Nginx 上,還好花了一天時間就稍微有點樣子了,在這邊紀錄順便複習今天學習到的內容。
Beginner’s Guide
從 Nginx 的官網上下載下來的檔案內容其實很簡單,只有一個 exe 執行檔和一些資料夾。Nginx 的運作方式主要是靠 nginx.conf 來決定的,這個檔案通常會在 /usr/local/nginx/conf /etc/nginx /usr/local/etc/nginx 這幾個目錄底下。
對 Nginx 進行操作
可以雙擊來執行 nginx.exe,或是在 cmd 中切換到 nginx 的資料夾底下,執行 start nginx 來啟動它。一旦 nginx 被執行起來,就需要以 nginx -s <options> 的方式來控制。

nginx -x <options> 中 options 可以填入的內容和說明。其中 nginx -s stop 和 nginx -s quit 的差別在於,quit 會停止接收 request,等到手上這個 request 處理完之後,才會結束目前的服務;而 stop 則是會立刻結束服務。另外, nginx -s quit 只能由開啟 nginx 的使用者(帳號)執行。
除了 nginx -s stop 之外,最常會用到的應該是 nginx -s reload。如果 nginx.conf 有進行修改的話,執行 reload,主程式才會吃到這個設定的更改。如果主程式設定成功,會通知其他舊有的程式,讓他們停止接收新的 request,將手上的 request 處理完之後結束服務,用新的設定開啟一個新的程式。如果主程式設定失敗的話,會把設定 rollback 成舊的設定並繼續執行。
config 檔案的名詞
在修改 nginx.conf 之前,我們先來認識一下 config 檔案裏面基本的組成元素。
simple directives 包含指令名稱和參數,兩者之間用半形空白 來區隔,並且以半形分號 ; 作為結尾。
block directive 結構和 simple directives 一樣,但他會被半形大括號 {}包起來。
context 一個 block directive 裡面有其他的 directive,例如 events http server location。
開始一個靜態服務
假設我們的 nginx.exe 位於 nginx 底下,接著我們在這裡新增一個資料夾 data,並在 data 裡面再新增兩個資料夾,分別是 www 和 images,將 index.html 放入 www 資料夾中,將任意的圖片放到 images 資料夾內,這時候你的資料夾結構會像這樣:
nginx
|- nginx.exe
|- conf
|- data
| |- www
| | |- index.html
| |- images
| | |- test.jpg
|- ...開啟你的 nginx.conf,並用下面的內容取代掉原本的設定:
開始一個靜態服務的設定
在設定 location 的時候,如果一個 url 如果有多個相符的區塊,nginx 會選擇具有最長前綴的區塊來發送請求。以上面的例子來說,第一個區塊的前綴是 /,長度為 1,因此只有當所有區塊都找不到相符的前綴時,才會使用者個前綴來作為發送請求的目的地。
將 nginx.conf 儲存之後,開啟 cmd 將目錄切換到 nginx 的資料夾底下,如果已經啟動過 nginx,執行 nginx -s reload 來重新載入改寫好的 nginx.conf;如果還沒有,輸入 start nginx 來啟動 nginx。
沒有出現任何錯誤的話,就可以打開瀏覽器,輸入 localhost:8081 就可以看到我們剛剛新增在 /data/www 底下的 index.html 了。
參考資料:官方文件