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

文章已收錄至https://lichong.work什湘,轉(zhuǎn)載請注明原文鏈接雷逆。
ps:歡迎關(guān)注公眾號“Fun肆編程”或添加我的私人微信交流經(jīng)驗(yàn)??

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

1.環(huán)境搭建

首先在linux系統(tǒng)下安裝gcc編譯環(huán)境楔脯,執(zhí)行:

yum install gcc-c++ -y

確保當(dāng)前系統(tǒng)可以編譯nginx及其依賴包侣颂。

同時,安裝Nginx還需要以下依賴需要進(jìn)行安裝:

pcre-9.37.tar.gz

openssl-1.0.1t.tar.gz

zlib-1.2.8.tar.gz

nginx-1.11.1.tar.gz

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

(1)聯(lián)網(wǎng)下載壓縮包安裝依賴

(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) 解壓壓縮文件后進(jìn)入到該壓縮文件
tar -xvf pcre-8.37.tar.gz

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

(2)安裝nginx的依賴

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

2.Nginx安裝

(1)到nginx官網(wǎng)下載安裝nginx明吩,推薦下載Stable version(穩(wěn)定版本)慧脱,本次安裝以nginx1.20.2為例。

nginx下載

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

cd /usr/src

tar -xvf nginx-1.20.2.tar.gz

(3) 進(jìn)入到解壓后的nginx文件夾

cd nginx-1.20.2

(4)對當(dāng)前安裝包進(jìn)行配置檢查

./configure

(5)進(jìn)行編譯安裝

make && make install

(6)進(jìn)到/usr/local/nginx/sbin文件夾中(安裝完nginx會在local文件夾中自動創(chuàng)建nginx文件)啟動nginx

cd /usr/local/nginx/sbin 

./nginx

(7)查看已啟動的nginx進(jìn)程

ps -ef | grep nginx

2.Nginx配置

(1) 進(jìn)入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中修改端口號。此處默認(rèn)不改動宗兼。

(3) 防火墻開放nginx的端口躏鱼,此處以80端口為例

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

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

nginx

3.Nginx常用命令

以下命令基于已經(jīng)安裝成功Nginx后在Nginx的sbin文件夾下執(zhí)行。

cd /usr/local/nginx/sbin/ 

(1)查看nginx的版本號

./nginx –v

(2)啟動nginx

./nginx

(3) 關(guān)閉nginx

./nginx -s stop

(4) 重新加載nginx(一般用于更改完conf中的配置文件后殷绍,在不重啟nginx的情況下使配置文件生效)

./nginx -s reload

二染苛、反向代理

這里以已經(jīng)配置好的nginx反向代理tomcat為例。實(shí)現(xiàn)效果則為訪問nginx地址展示tomcat頁面。

1.在linux中安裝并啟動好tomcat用于測試茶行,并且開放tomcat的端口號躯概。

2.在nginx的nginx.conf配置文件中配置反向代理

cd /usr/local/nginx/conf

vi nginx.conf

3.配置反向代理

首先將server塊中的server_name修改為該linux系統(tǒng)的ip地址。

然后在server塊中的location當(dāng)中配置需要請求轉(zhuǎn)發(fā)的路徑畔师,其中proxy_pass則是tomcat的地址娶靡。

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

4.訪問nginx地址

三、負(fù)載均衡

nginx配備多臺服務(wù)器的情況下看锉,平均訪問每臺機(jī)器姿锭。

此次以兩臺tomcat服務(wù)器為例,一臺端口為8080伯铣,一臺端口為8081呻此。

1.在nginx配置文件中進(jìn)行負(fù)載均衡的配置

配置服務(wù)器地址

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.負(fù)載均衡分配策略

1.輪詢

默認(rèn)情況下是輪詢策略,到nginx服務(wù)器中的每個請求按時間順序逐一分配到不同的后端服務(wù)器腔寡,如果后端服務(wù)器down調(diào)則自動剔除該服務(wù)器

2.權(quán)重weight

weight默認(rèn)為1焚鲜,權(quán)重越高被分配的客戶端越多,可根據(jù)服務(wù)器性能來配置相應(yīng)的權(quán)重放前。

可在upstream中配置

upstream myserver{

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

}

3.ip_hash

每個請求按照訪問ip的hash結(jié)果分配忿磅,也就是說同一ip訪問nginx會一直講請求發(fā)送給同一臺服務(wù)器。

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

需要注意的nginx1.3.1版本之前ip_hash不能和權(quán)重weight共同使用犀斋。

當(dāng)有服務(wù)器需要剔除的時候贝乎,需要手動down掉

4.fair

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

按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配

5.least_conn

把請求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器叽粹。在這種方式下可以達(dá)到更好的負(fù)載均衡效果

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

6.url_hash

按訪問url的hash結(jié)果來分配請求览效,使每個url定向到同一個后端服務(wù)器。

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

四虫几、動靜分離

我們通過使用正則表達(dá)式來匹配過濾锤灿,以此來達(dá)到動態(tài)頁面和靜態(tài)頁面的操作可以交給不同的服務(wù)器。

以下配置實(shí)現(xiàn)的是當(dāng)為jpg辆脸,js和css文件的時候則訪問本地html文件里的靜態(tài)資源但校,如果訪問的是動態(tài)資源則由8080端口tomcat服務(wù)器處理

以下是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
}

}

五、高可用集群

這里介紹下雙機(jī)高可用啡氢,主要分為兩種:

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

一臺主服務(wù)器和一臺熱備服務(wù)器状囱。正常情況下主服務(wù)器提供服務(wù),只有當(dāng)主服務(wù)器發(fā)生故障的時候熱備服務(wù)器才會接管主服務(wù)器倘是。但是當(dāng)主服務(wù)器不出現(xiàn)故障的時候亭枷,則熱備服務(wù)器就會處于浪費(fèi)狀態(tài)

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

使用兩臺負(fù)載均衡服務(wù)器,互為主備搀崭,兩臺服務(wù)器都屬于活動狀態(tài)叨粘,只有當(dāng)其中一臺發(fā)生故障時由另一臺接管故障服務(wù)器的請求。這種方案比較經(jīng)濟(jì)實(shí)惠。

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

1.Nginx+keepalived雙機(jī)主從模式

配備兩臺nginx服務(wù)器升敲,每臺中配置keepalived答倡。

(1)配備兩臺服務(wù)器,并且在兩臺服務(wù)器中安裝nginx(安裝見上)

(2)在兩臺服務(wù)器中安裝keepalived

yum install keepalived -y

(3)打開keepalived所在文件夾

cd /etc/keepalived/

(3)對keepalived進(jìn)行配置

vi keepalived.conf

(4)在keepalived.conf具體參數(shù)配置

主服務(wù)器配置如下

vrrp_instance VI_1 {
    state MASTER    //主從劃分驴党,主服務(wù)器為MASTER從服務(wù)器為BACKUP
    interface eth0  //設(shè)置為當(dāng)前網(wǎng)卡(通過ifconfig查看)
    virtual_router_id 51  //主從服務(wù)器設(shè)置相同的id
    priority 100      //優(yōu)先級 主服務(wù)器的優(yōu)先級設(shè)置為較大瘪撇,從服務(wù)器次之
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.111  //虛擬地址,瀏覽器通過該地址訪問鼻弧,主從配置相同
    }
}


從服務(wù)器配置如下

vrrp_instance VI_1 {
    state BACKUP
    interface eth0 //設(shè)置為當(dāng)前網(wǎng)卡(通過ifconfig查看)
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.111
    }
}


主從服務(wù)器都在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)兩臺服務(wù)器上啟動nginx和keepalived

./nginx

systemctl start keepalived.service

(6)測試

訪問keepalived.conf中配置的虛擬ip地址,可以正常訪問服務(wù)器攘轩。將主服務(wù)器中的nginx中停止叉存,仍可正常訪問,此時訪問的實(shí)際上是從服務(wù)器上的資源

2.Nginx+keepalived雙機(jī)主主模式

在兩臺機(jī)器上都安裝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      #(檢測腳本執(zhí)行的間隔)
 
   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      #(檢測腳本執(zhí)行的間隔)

   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
    }
}

在雙機(jī)主主模式下,兩臺服務(wù)器都屬于活動狀態(tài)笨篷,只有當(dāng)其中一臺發(fā)生故障時由另一臺接管故障服務(wù)器的請求瞳秽。

六、推薦參數(shù)配置

可參考文章:【工具-Nginx】Nginx高性能通用配置文件-注釋版-支持防刷限流率翅、可控高并發(fā)练俐、HTTP2、防XSS冕臭、Gzip腺晾、OCSP Stapling、負(fù)載辜贵、SSL

文章已收錄至https://lichong.work悯蝉,轉(zhuǎn)載請注明原文鏈接。
ps:歡迎關(guān)注公眾號“Fun肆編程”或添加我的私人微信交流經(jīng)驗(yàn)??

<center><font color="DeepSkyBlue">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<strong>往期精選??</strong>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</font></center>

【前端-開發(fā)環(huán)境】使用NVM實(shí)現(xiàn)不同nodejs版本的自由切換(NVM完整安裝使用手冊)
【前端-NPM私服】內(nèi)網(wǎng)使用verdaccio搭建私有npm服務(wù)器
【前端-IE兼容】Win10和Win11使用Edge調(diào)試前端兼容IE6托慨、IE7鼻由、IE8、IE9厚棵、IE10蕉世、IE11問題
【工具-Shell腳本】java程序產(chǎn)品包模板-linux和windows通用shell啟動停止腳本(無需系統(tǒng)安裝Java運(yùn)行環(huán)境)
【工具-Nginx】Nginx高性能通用配置文件-注釋版-支持防刷限流、可控高并發(fā)婆硬、HTTP2讨彼、防XSS、Gzip柿祈、OCSP Stapling、負(fù)載、SSL
【工具-WireShark】網(wǎng)絡(luò)HTTP抓包使用教程
【后端-maven打包】通過profile標(biāo)簽解決同時打jar包 war包需求
【后端-SpringCache】基于Spring Cache封裝一個能夠批量操作的Redis緩存記錄下踩坑歷程(pipeline或mget封裝)
【后端-SkyWalking】SkyWalking前后端開發(fā)環(huán)境搭建詳細(xì)教程步驟-6.x/7.x/8.x版本通用-插件二次開發(fā)利器(一)

<p align="right"><font color="red"><strong>?歡迎為耿直少年點(diǎn)贊躏嚎、關(guān)注蜜自、收藏!B丁重荠!</strong></font></p>
<p align="right"><font color="red"><strong>??????</strong></font></p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虚茶,隨后出現(xiàn)的幾起案子戈鲁,更是在濱河造成了極大的恐慌,老刑警劉巖嘹叫,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婆殿,死亡現(xiàn)場離奇詭異,居然都是意外死亡罩扇,警方通過查閱死者的電腦和手機(jī)婆芦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喂饥,“玉大人消约,你說我怎么就攤上這事≡卑铮” “怎么了或粮?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捞高。 經(jīng)常有香客問我氯材,道長,這世上最難降的妖魔是什么棠枉? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任浓体,我火速辦了婚禮,結(jié)果婚禮上辈讶,老公的妹妹穿的比我還像新娘命浴。我一直安慰自己,他們只是感情好贱除,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布生闲。 她就那樣靜靜地躺著,像睡著了一般月幌。 火紅的嫁衣襯著肌膚如雪碍讯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天扯躺,我揣著相機(jī)與錄音捉兴,去河邊找鬼蝎困。 笑死,一個胖子當(dāng)著我的面吹牛倍啥,可吹牛的內(nèi)容都是我干的禾乘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼虽缕,長吁一口氣:“原來是場噩夢啊……” “哼始藕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氮趋,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伍派,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剩胁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诉植,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年摧冀,在試婚紗的時候發(fā)現(xiàn)自己被綠了倍踪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡索昂,死狀恐怖建车,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椒惨,我是刑警寧澤缤至,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站康谆,受9級特大地震影響领斥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沃暗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一月洛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孽锥,春花似錦嚼黔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盛撑,卻和暖如春碎节,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抵卫。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工狮荔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胎撇,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓轴合,卻偏偏與公主長得像创坞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子受葛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容