【工具-Nginx】從入門安裝到高可用叢集搭建

Run肆程式設計發表於2022-05-19

文章已收錄至https://lichong.work,轉載請註明原文連結。
ps:歡迎關注公眾號“Fun肆程式設計”或新增我的私人微信交流經驗?

一.Nginx安裝配置及常用命令

1.環境搭建

首先在linux系統下安裝gcc編譯環境,執行:

yum install gcc-c++ -y

確保當前系統可以編譯nginx及其依賴包。

同時,安裝Nginx還需要以下依賴需要進行安裝:

pcre-9.37.tar.gz

openssl-1.0.1t.tar.gz

zlib-1.2.8.tar.gz

nginx-1.11.1.tar.gz

下面通過兩種安裝方式安裝這些依賴,可靈活選擇安裝方式

(1)聯網下載壓縮包安裝依賴

(1.1)在linux資料夾下下載壓縮包,這裡已/usr/src資料夾為例
cd /usr/src

wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
(1.2) 解壓壓縮檔案後進入到該壓縮檔案
tar -xvf pcre-8.37.tar.gz

cd pcre-8.37
(1.3)對當前安裝包進行配置檢查
./configure 
(1.4)進行編譯安裝
make && make install
(1.5)安裝完成,可通過命令檢視是否安裝成功及當前安裝版本
pcre-config --version

(2)安裝nginx的依賴

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2.Nginx安裝

(1)到nginx官網下載安裝nginx,推薦下載Stable version(穩定版本),本次安裝以nginx1.20.2為例。

nginx下載

(2)將nginx的壓縮包放到/usr/src中,進入該目錄下對該壓縮包進行解壓

cd /usr/src

tar -xvf nginx-1.20.2.tar.gz

(3) 進入到解壓後的nginx資料夾

cd nginx-1.20.2

(4)對當前安裝包進行配置檢查

./configure

(5)進行編譯安裝

make && make install

(6)進到/usr/local/nginx/sbin資料夾中(安裝完nginx會在local資料夾中自動建立nginx檔案)啟動nginx

cd /usr/local/nginx/sbin 

./nginx

(7)檢視已啟動的nginx程式

ps -ef | grep nginx

2.Nginx配置

(1) 進入nginx的配置資料夾

cd /usr/local/nginx/conf

(2)開啟nginx.conf檔案

vi nginx.conf

其中

server {
 listen    80;
 server_name localhost;
 #charset koi8-r;
 #access_log logs/host.access.log main;
 location / {
   root  html;
   index index.html index.htm;
  }
}

如果要配置固定埠號,則在server中的listen中修改埠號。此處預設不改動。

(3) 防火牆開放nginx的埠,此處以80埠為例

sudo firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

(4)從瀏覽器訪問該nginx(瀏覽器訪問linux的ip地址)

nginx

3.Nginx常用命令

以下命令基於已經安裝成功Nginx後在Nginx的sbin資料夾下執行。

cd /usr/local/nginx/sbin/ 

(1)檢視nginx的版本號

./nginx –v

(2)啟動nginx

./nginx

(3) 關閉nginx

./nginx -s stop

(4) 重新載入nginx(一般用於更改完conf中的配置檔案後,在不重啟nginx的情況下使配置檔案生效)

./nginx -s reload

二、反向代理

這裡以已經配置好的nginx反向代理tomcat為例。實現效果則為訪問nginx地址展示tomcat頁面。

1.在linux中安裝並啟動好tomcat用於測試,並且開放tomcat的埠號。

2.在nginx的nginx.conf配置檔案中配置反向代理

cd /usr/local/nginx/conf

vi nginx.conf

3.配置反向代理

首先將server塊中的server_name修改為該linux系統的ip地址。

然後在server塊中的location當中配置需要請求轉發的路徑,其中proxy_pass則是tomcat的地址。

location / {
	  root    html;
	  proxy_pass http://127.0.0.1:8080;
	}

4.訪問nginx地址

三、負載均衡

nginx配備多臺伺服器的情況下,平均訪問每臺機器。

此次以兩臺tomcat伺服器為例,一臺埠為8080,一臺埠為8081。

1.在nginx配置檔案中進行負載均衡的配置

配置伺服器地址

upstream myserver{
	server xxx.xx.xx.14:8080;
	server xxx.xx.xx.14:8081;	
}
server{
	listen    80;
	server_name xxx.xx.xx.14
	#charset koi8-r;
	#access_log logs/host.access.log main;
	location / {
		proxy_pass  http://myserver; //這裡的myserver是上面配置的upstream
		root  html;
		index index.html index.htm;
  }
}

2.負載均衡分配策略

1.輪詢

預設情況下是輪詢策略,到nginx伺服器中的每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down調則自動剔除該伺服器

2.權重weight

weight預設為1,權重越高被分配的客戶端越多,可根據伺服器效能來配置相應的權重。

可在upstream中配置

upstream myserver{

	server xxx.xx.xx.14:8080  weight=2;//數值越大則需要處理的請求越多
	
	server xxx.xx.xx.14:8081;	

}

3.ip_hash

每個請求按照訪問ip的hash結果分配,也就是說同一ip訪問nginx會一直講請求傳送給同一臺伺服器。

upstream myserver{
	ip_hash;
	server xxx.xx.xx.14:8080 ;
	server xxx.xx.xx.14:8081;	
}

需要注意的nginx1.3.1版本之前ip_hash不能和權重weight共同使用。

當有伺服器需要剔除的時候,需要手動down掉

4.fair

upstream myserver{
	ip_hash;
	server xxx.xx.xx.14:8080 ;
	server xxx.xx.xx.14:8081;	
    fair;
}

按後端伺服器的響應時間來分配請求,響應時間短的優先分配

5.least_conn

把請求轉發給連線數較少的後端伺服器。在這種方式下可以達到更好的負載均衡效果

upstream myserver{
	least_conn;
	server xxx.xx.xx.14:8080 ;
	server xxx.xx.xx.14:8081;	
}

6.url_hash

按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器。

upstream myserver{
	hash $request_uri;
	server xxx.xx.xx.14:8080 ;
	server xxx.xx.xx.14:8081;	
}

四、動靜分離

我們通過使用正規表示式來匹配過濾,以此來達到動態頁面和靜態頁面的操作可以交給不同的伺服器。

以下配置實現的是當為jpg,js和css檔案的時候則訪問本地html檔案裡的靜態資源,如果訪問的是動態資源則由8080埠tomcat伺服器處理

以下是nginx.conf檔案的配置

server{

listen    80;
server_name xxx.xx.xx.14
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ \.jpg$ {
	root  html;
	expires 30d;
}
location ~ \.js$ {
	root  html;
	expires 30d;
}
location ~ \.css$ {
	root  html;
	expires 30d;
}

location ~ .*$ {
	proxy_pass http://localhost:8080
}

}

五、高可用叢集

這裡介紹下雙機高可用,主要分為兩種:

(一).Nginx+keepalived雙機主從模式

一臺主伺服器和一臺熱備伺服器。正常情況下主伺服器提供服務,只有當主伺服器發生故障的時候熱備伺服器才會接管主伺服器。但是當主伺服器不出現故障的時候,則熱備伺服器就會處於浪費狀態

(二).Nginx+keepalived雙機主主模式

使用兩臺負載均衡伺服器,互為主備,兩臺伺服器都屬於活動狀態,只有當其中一臺發生故障時由另一臺接管故障伺服器的請求。這種方案比較經濟實惠。

下面分別介紹下這兩種模式的配置:

1.Nginx+keepalived雙機主從模式

配備兩臺nginx伺服器,每臺中配置keepalived。

(1)配備兩臺伺服器,並且在兩臺伺服器中安裝nginx(安裝見上)

(2)在兩臺伺服器中安裝keepalived

yum install keepalived -y

(3)開啟keepalived所在資料夾

cd /etc/keepalived/

(3)對keepalived進行配置

vi keepalived.conf

(4)在keepalived.conf具體引數配置

主伺服器配置如下

vrrp_instance VI_1 {
    state MASTER    //主從劃分,主伺服器為MASTER從伺服器為BACKUP
    interface eth0  //設定為當前網路卡(通過ifconfig檢視)
    virtual_router_id 51  //主從伺服器設定相同的id
    priority 100      //優先順序 主伺服器的優先順序設定為較大,從伺服器次之
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.111  //虛擬地址,瀏覽器通過該地址訪問,主從配置相同
    }
}


從伺服器配置如下

vrrp_instance VI_1 {
    state BACKUP
    interface eth0 //設定為當前網路卡(通過ifconfig檢視)
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.111
    }
}


主從伺服器都在keepalived.conf中新增如下檢測指令碼檢測指令碼

vrrp_script chk_http_port {
     script "usr/local/src/nginx_check.sh" //nginx_check.sh所在位置,該檔案通過下個步驟中新建
     interval 2
     weight2
}

在script配置路徑下配置該檢測指令碼

cd /usr/local/src/

將以下指令碼生成nginx_check.sh檔案放到 usr/local/src/中

#!/bin/bash
A=`ps -C nginx – no-header |wc -l` 
if [ $A -eq 0 ];then 
		/usr/local/nginx/sbin/nginx 
		sleep 2 
		if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
			 killall keepalived 
		fi 
fi

(5)兩臺伺服器上啟動nginx和keepalived

./nginx

systemctl start keepalived.service

(6)測試

訪問keepalived.conf中配置的虛擬ip地址,可以正常訪問伺服器。將主伺服器中的nginx中停止,仍可正常訪問,此時訪問的實際上是從伺服器上的資源

2.Nginx+keepalived雙機主主模式

在兩臺機器上都安裝nginx和keepalived。具體安裝方式見上。

(1)第一臺keepalived配置

! Configuration File for keepalived
 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_script chk_http_port {
 
   script "usr/local/src/nginx_check.sh"
 
   interval 2      #(檢測指令碼執行的間隔)
 
   weight 2
 
}
 
vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.112
    }
}
 
vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 52
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.113
    }
}

(2)第二臺keepalived配置

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_http_port {

   script "usr/local/src/nginx_check.sh"

   interval 2      #(檢測指令碼執行的間隔)

   weight 2

}

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.112
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eno16777736
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.113
    }
}

在雙機主主模式下,兩臺伺服器都屬於活動狀態,只有當其中一臺發生故障時由另一臺接管故障伺服器的請求。

六、推薦引數配置

可參考文章:【工具-Nginx】Nginx高效能通用配置檔案-註釋版-支援防刷限流、可控高併發、HTTP2、防XSS、Gzip、OCSP Stapling、負載、SSL

文章已收錄至https://lichong.work,轉載請註明原文連結。
ps:歡迎關注公眾號“Fun肆程式設計”或新增我的私人微信交流經驗?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~往期精選?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【前端-開發環境】使用NVM實現不同nodejs版本的自由切換(NVM完整安裝使用手冊)
【前端-NPM私服】內網使用verdaccio搭建私有npm伺服器
【前端-IE相容】Win10和Win11使用Edge除錯前端相容IE6、IE7、IE8、IE9、IE10、IE11問題
【工具-Shell指令碼】java程式產品包模板-linux和windows通用shell啟動停止指令碼(無需系統安裝Java執行環境)
【工具-Nginx】Nginx高效能通用配置檔案-註釋版-支援防刷限流、可控高併發、HTTP2、防XSS、Gzip、OCSP Stapling、負載、SSL
【工具-WireShark】網路HTTP抓包使用教程
【後端-maven打包】通過profile標籤解決同時打jar包 war包需求
【後端-SpringCache】基於Spring Cache封裝一個能夠批量操作的Redis快取記錄下踩坑歷程(pipeline或mget封裝)
【後端-SkyWalking】SkyWalking前後端開發環境搭建詳細教程步驟-6.x/7.x/8.x版本通用-外掛二次開發利器(一)

✨歡迎為耿直少年點贊、關注、收藏!!!

???

相關文章