Nginx快速入門

_李發表於2021-01-31

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 即可!