Nginx服務快速入門
一、Nginx介紹
1. 什麼是Nginx?
-
Nginx (engine x) 是一個高效能的HTTP和反向代理web伺服器,同時也提供了IMAP/POP3/SMTP服務。
-
其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力在同型別的網頁伺服器中表現較好。
2. 為什麼要使用Nginx?
隨著當今網際網路的迅速發展,單點伺服器早已無法承載上萬個乃至數十萬個使用者的持續訪問。比如一臺Tomcat伺服器在理想狀態下只能夠可以承受住2000個左右的併發量,為了解決這個問題,就需要多臺Tomcat伺服器來進行負載均衡。
那麼,應該如何實現負載均衡?Nginx就是其中的一種解決方案,當使用者訪問網站時,Nginx攔截到這個訪問請求,並將其通過輪詢的方式均勻地分配到不同的伺服器上。
並且,在Nginx中有一種ip_hash策略,它可以獲取到使用者的真實IP,計算出hash值來選擇伺服器,這也是一種優秀的負載均衡方式。 所以,掌握Nginx成為了Web開發學習道路上不可缺少的一部分。
3. 什麼是正向代理?
正向代理,就是客戶端將自己的請求率先發給代理伺服器,通過代理伺服器將請求轉發給伺服器。我們常用的VPN就是一種代理伺服器,為了可以連上國外的網站,客戶端需要使用一個可以連線外網的伺服器作為代理,並且客戶端能夠連線上該代理伺服器。
4. 什麼是反向代理?
反向代理與正向代理不同,正向代理是代理了客戶端,而反向代理則是代理伺服器端。在有多臺伺服器分佈的情況下,為了能讓客戶端訪問到的IP地址都為同一個網站,就需要使用反向代理。
明白了反向代理的工作機制後,接下來就可以進入Nginx的學習!
二、Nginx在Linux下的安裝
由於Nginx被大量使用在Web伺服器中,所以本教程選擇了Centos伺服器的7.4版本作為演示!
1. 下載
進入官方下載頁面:http://nginx.org/en/download.html,選擇Stable version穩定版本進行下載,並上傳至伺服器。
2. 安裝
-
上傳tar包至伺服器後,解壓到當前目錄
tar -zxvf nginx-1.18.0.tar.gz -C ./
-
進入解壓後的目錄,執行configure指令碼
cd nginx-1.18.0/ ./configure
-
使用make命令進行安裝
make && make install
-
安裝完成後,使用whereis命令查詢Nginx的安裝位置 (預設安裝在/user/local/目錄下)
whereis nginx
-
進入安裝目錄下的bin資料夾,啟動nginx服務,訪問伺服器預設的80埠檢視是否安裝成功!
三、Nginx配置入門
1. 配置檔案
在Nginx的安裝目錄下有一個conf資料夾,開啟其中的nginx.conf檔案
cd conf/ && vim nginx.conf
2. 反向代理單個伺服器
那麼,如何使用Nginx進行反向代理?
在location引數中新增proxy_pass欄位,並填寫需要反向代理的伺服器地址與埠號:
注意:每一行的配置都需要以封號結尾!!!
# 配置監聽的目錄為:/
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080; # 反向代理了本機的8080埠
# proxy_pass http://127.0.0.1:8081; # 可以同時配置多條proxy_pass,反向代理了本機的8081埠
}
3. 反向代理多臺伺服器
如果有多臺伺服器怎麼辦?除了不斷地新增proxy_pass引數,更好的解決方案是配置upstream伺服器組!
在配置檔案的http塊中新增upstream屬性:
# 配置伺服器組,取名為hello
upstream hello{
# 一個server對應一個伺服器,當然也可以是不同埠的web程式
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
# 在location塊中修改反向代理為伺服器組
location / {
root html;
index index.html index.htm;
proxy_pass http://hello; # 反向代理了hello伺服器組中的所有伺服器
}
四、執行測試
1. 啟動服務
配置完成後,進入Nginx安裝目錄下的sbin資料夾,執行nginx程式即可:
/usr/local/nginx/sbin/nginx
如果之前已經啟動,無需關閉nginx服務,只需要讓nginx重新載入配置檔案即可:
nginx -s reload
重新整理瀏覽器,若反向代理成功,訪問的路徑會自動對映到配置檔案中的伺服器地址!
將來,隨著使用者量的增長,可能需要新增新的伺服器;這時只需要修改配置檔案,使用 nginx -s reload 命令即可,無需關閉nginx伺服器!
2. 關閉服務
關閉nginx服務的方式一般分為兩種:
nginx -s stop # 立即停止,無論是否在工作
nginx -s quit # 等待程式完成當前工作後安全退出
五、負載均衡
1. 什麼是負載均衡?
由於不同伺服器的配置不同,為了讓效能高的伺服器分配到更多的請求,便引入了負載均衡的概念。
前面提到過,Nginx的負載均衡方式可以有很多種,如加權輪詢(預設)、IP雜湊、url雜湊等等,這裡就以加權輪詢作為介紹。
加權輪詢,也就是通過給伺服器新增各自的權重值,Nginx通過權重來進行請求的分配,權重越高接收到的請求數量越多,反之越少:
上圖配置了三臺伺服器,在加權輪詢的模式下,6次不同的請求中,權重為3的伺服器將會分配到3次請求,權重為2的伺服器會分配到2個請求,權重為1的伺服器則會分配到1個請求。負載均衡大大減少了在高併發的環境下伺服器當機的風險!
2. 配置Nginx負載均衡
同樣地,開啟nginx.conf檔案進行配置:
vim nginx.conf
在upstream塊中新增weight引數:
upstream hello{
server 伺服器1:8080 weight=3; # 配置伺服器1的權重為3
server 伺服器2:8080 weight=1; # 配置伺服器2的權重為1
}
新增完成後執行 nginx -s reload 即可!