nginx初學入門
因為前幾天加班比較多,人也比較累,不怎麼想學習新的知識,週三加班到週四凌晨1點多,週四晚上直接到週五4點鐘才睡,上午還要去上班,結果專案線上小問題不斷,搞的身心俱疲,副能量爆滿!!!週末就想著好好放松下,所以今天來點簡單的!nginx,其實自己接觸nginx也比較長時間了,上家公司專案使用nginx主要作為的是靜態資源伺服器,畢竟nginx的效能在業界也是有目共睹的,但是自己並沒有怎麼學習過nginx,只是懂的一點點配置。這次之所以想起再來看nginx是因為前段時間自己想在自己的伺服器上搞一個jet brains的伺服器,方便自己使用,其中就用nginx作為反向代理伺服器使用,結果呢,搞了半天也沒成功,也不知道是哪方面原因。所以自己準備再研究一下,不然以後經常找IDE的破解碼也挺麻煩(壕們請支援正版)。不管怎麼說nginx作為一個優秀的web伺服器確實是值得我們去好好學習一下的。
一、安裝和啟動
這次我使用的是安裝包安裝,當然覺得麻煩也可以使命令直接安裝。我這次安裝下載的1.14版本,應該是最新版本了。下載之後進入相應資料夾下,執行解壓命令:
tar zxvf nginx-1.14.0.tar.gz
大概看下解壓的目錄結構:

2018-11-03 20-18-58 的螢幕截圖.png
然後使用預設的配置,即執行./configure命令,結果報錯,提示HTTP rewrite模組需要PCRE庫。當然給出的方案要不禁用http_rewrite模組,要不繫統安裝PCRE庫。所以就選擇在自己系統安裝PCRE庫吧。

2018-11-03 20-19-47 的螢幕截圖.png
執行命令安裝PCRE和它的二次開發庫:
sudo apt-get install libpcre3 libpcre3-dev
PCRE庫支援正則表示式。如果我們在nginx.conf中使用了正則表示式,那麼在編譯nginx時就必須把PCRE庫編譯進nginx,因為HTTP模組需要靠它來解析正則表示式。而pcre-devel是使用PCRE做二次開發時所需要的開發庫,包括標頭檔案等,這也是編譯nginx需要使用到的。
僅僅安裝了PCRE庫是不夠的,還需要安裝zlib庫,這個是HTTP gzip模組需要使用到。zlib庫用於對HTTP包的內容做gzip格式的壓縮,如果我們在nginx.conf中配置了gzip on,並指定對於某些型別(content-type)的HTTP響應使用gzip來進行壓縮以減少網路傳輸量(如果你仔細看過http請求的時候就會注意到這點),因此在編譯時必須把zlib編譯進nginx,zlib-devel是二次開發所需要的庫。所以還需要執行下面的命令:
sudo apt-get install zlib1g-dev
最後如果伺服器不只是要支援HTTP還想支援更安全的HHTPS,那麼就還需要安裝OpenSSL,我的系統之前已經安裝過了,安裝命令:
sudo apt-get install openssl libssl-dev
這時候再次執行預設配置如圖所示:

2018-11-03 20-31-20 的螢幕截圖.png
然後編譯安裝nginx:
sudo make install
編譯安裝完之後我們看到安裝目錄下,即"/usr/local/nginx",然後進入"/sbin目錄",啟動nginx:
sudo ./nginx
使用瀏覽器訪問:localhost:80,顯示nginx的index.htm頁面,說明伺服器成功啟動。
這裡簡單說下nginx常用命令
./nginx ./nginx -s quit ./nginx -s stop ./nginx -s reload
quit和stop都是停止伺服器的意思,但是quit的命令會在關閉伺服器前完成正在服務的連線,而stop就是立即停止服務。另外如果對nginx的配置檔案進行了修改,並想使其生效,可以用reload命令。
二、反向代理配置
關於什麼是反向代理,以及和代理的區別這裡就不細述了,如果又不瞭解建議百度或者谷歌一下,其實很好理解。我這裡只是做一個最簡單的配置,比如現在我想讓使用者訪問localhost:80/這個請求的時候,顯示百度的首頁,那麼我就可以到"/usr/local/conf/"下進行配置,開啟nginx.conf檔案,在http模組的server自摸塊下面修改配置檔案內容,在location下新增代理的地址就可以了,如下圖:

2018-11-04 12-09-33 的螢幕截圖.png
其實從http模組我們也可以看到一些基本的配置的內容,比如檔案mime型別,預設的型別為二進位制流,此外日誌格式和日誌位置,檔案傳輸,連線超時時間以及gzip設定。
server下面主要是監聽埠號,伺服器名稱,這裡可以是域名也可以是ip地址,另外還有就是字元編碼和日誌。location主要是配置URL和解析URL,比如預設情況下使用者訪問localhost:80,nginx會到響應的內容是html下面的index.html或者index.htm,root這裡使用的是相對路徑(相對於nginx安裝目錄),當然也可以使用絕對路徑。
反向代理是同過"proxy_pass"來實現的,我這裡配置了百度的域名,儲存好配置檔案之後,執行reload命令重新載入新的配置檔案,並訪問:localhost:80

2018-11-04 12-07-24 的螢幕截圖.png
可以看到已經是百度頁面了,然後看下請求和響應頭,根據狀態嗎推斷是nginx幫我們做了重定向。以上就是最簡單的一個反向代理的例子。
三、靜態資源伺服器
使用nginx作為靜態資源伺服器在上家公司遇到過,但是目前開發web伺服器主要還是使用Apache,vanish快取。還是在server子模組下,新增一個location的配置:
location /static/ { root /home/ypcfly/ypcfly; expires 1d; }
這裡我開始的時候遇到了一個問題,就是請求資源時報404錯誤,後來網上找了一些資料才算是搞明白是怎麼回事了。主要是root和alias的區別,比如現在配置的root,如果請求localhost:80/static/images/111.jpg,實際對應的路徑是/home/ypcfly/ypcfly/static/images/111.jpg,也就是說如果配置成root的話,檔案的地址應該是配置的root路徑 + location路徑 + 請求資源名。如果配置的是alias的話配置稍有不同
location /static/ { alias /home/ypcfly/ypcfly/; expires 1d; }
注意:alias必須以"/"結尾。如果我訪問的依然是localhost:80/static/images/111.jpg,這時實際的路徑應該是/home/ypcfly/ypcfly/images/111.jpg,也就是說配置成alias,檔案地址是:配置的alias路徑 + 請求資源名稱。這個是官方文件的一點說明: ofollow,noindex">https://nginx.org/en/docs/beginners_guide.html#static
expires指定的是過期時間
好了,我配置使用的是root,重新載入下配置檔案,並訪問localhost:80/static/images/golang-5.png,我本地圖片儲存的實際路徑是:/home/ypcfly/ypcfly/static/images/golang-5.png。

2018-11-04 13-53-01 的螢幕截圖.png
已經可以正常訪問了,說明配置生效了。
今天只是從最簡單的部分入手,如果要深入的學習,還是要多看文件,多實踐,多總結才行。今天自己也是偷懶,從最簡單的部分開始,關於nginx的其他知識點後期再學習。