前言
公司產(chǎn)品出現(xiàn)瓶頸?
公司項(xiàng)目剛剛上線(xiàn)的時(shí)候革答,并發(fā)量小战坤,用戶(hù)使用的少曙强,所以在低并發(fā)的情況下残拐,一個(gè)jar包啟動(dòng)應(yīng)用就夠了,然后內(nèi)部tomcat返回內(nèi)容給用戶(hù)碟嘴。
但是慢慢的溪食,使用我們平臺(tái)的用戶(hù)越來(lái)越多了,并發(fā)量慢慢增大了娜扇,這時(shí)候一臺(tái)服務(wù)器滿(mǎn)足不了我們的需求了错沃。
于是我們橫向擴(kuò)展,又增加了服務(wù)器雀瓢。這個(gè)時(shí)候幾個(gè)項(xiàng)目啟動(dòng)在不同的服務(wù)器上枢析,用戶(hù)要訪(fǎng)問(wèn),就需要增加一個(gè)代理服務(wù)器了刃麸,通過(guò)代理服務(wù)器來(lái)幫我們轉(zhuǎn)發(fā)和處理請(qǐng)求醒叁。
我們希望這個(gè)代理服務(wù)器可以幫助我們接收用戶(hù)的請(qǐng)求,然后將用戶(hù)的請(qǐng)求按照規(guī)則幫我們轉(zhuǎn)發(fā)到不同的服務(wù)器節(jié)點(diǎn)之上泊业。這個(gè)過(guò)程用戶(hù)是無(wú)感知的把沼,用戶(hù)并不知道是哪個(gè)服務(wù)器返回的結(jié)果,我們還希望他可以按照服務(wù)器的性能提供不同的權(quán)重選擇吁伺。保證最佳體驗(yàn)饮睬!所以我們使用了Nginx。
什么是Nginx篮奄?
Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理web服務(wù)器捆愁,同時(shí)也提供了IMAP/POP3/SMTP服務(wù)割去。Nginx是由伊戈?duì)枴べ愃饕驗(yàn)槎砹_斯訪(fǎng)問(wèn)量第二的Rambler.ru站點(diǎn)(俄文:Рамблер)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本0.1.0發(fā)布于2004年10月4日牙瓢。2011年6月1日劫拗,nginx 1.0.4發(fā)布。
其特點(diǎn)是占有內(nèi)存少矾克,并發(fā)能力強(qiáng)页慷,事實(shí)上nginx的并發(fā)能力在同類(lèi)型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好,中國(guó)大陸使用nginx網(wǎng)站用戶(hù)有:百度胁附、京東酒繁、新浪、網(wǎng)易控妻、騰訊州袒、淘寶等。在全球活躍的網(wǎng)站中有12.18%的使用比率弓候,大約為2220萬(wàn)個(gè)網(wǎng)站郎哭。
Nginx 是一個(gè)安裝非常的簡(jiǎn)單、配置文件非常簡(jiǎn)潔(還能夠支持perl語(yǔ)法)菇存、Bug非常少的服務(wù)夸研。Nginx 啟動(dòng)特別容易,并且?guī)缀蹩梢宰龅?*24不間斷運(yùn)行依鸥,即使運(yùn)行數(shù)個(gè)月也不需要重新啟動(dòng)亥至。你還能夠不間斷服務(wù)的情況下進(jìn)行軟件版本的升級(jí)。
Nginx代碼完全用C語(yǔ)言從頭寫(xiě)成贱迟。官方數(shù)據(jù)測(cè)試表明能夠支持高達(dá) 50,000 個(gè)并發(fā)連接數(shù)的響應(yīng)姐扮。
Nginx作用?
Http代理衣吠,反向代理:作為web服務(wù)器最常用的功能之一茶敏,尤其是反向代理。
正向代理
反向代理
Nginx提供的負(fù)載均衡策略有2種:內(nèi)置策略和擴(kuò)展策略缚俏。內(nèi)置策略為輪詢(xún)惊搏,加權(quán)輪詢(xún),Ip hash袍榆。擴(kuò)展策略胀屿,就天馬行空,只有你想不到的沒(méi)有他做不到的包雀。
輪詢(xún)
加權(quán)輪詢(xún)
iphash對(duì)客戶(hù)端請(qǐng)求的ip進(jìn)行hash操作宿崭,然后根據(jù)hash結(jié)果將同一個(gè)客戶(hù)端ip的請(qǐng)求分發(fā)給同一臺(tái)服務(wù)器進(jìn)行處理,可以解決session不共享的問(wèn)題才写。
動(dòng)靜分離葡兑,在我們的軟件開(kāi)發(fā)中奖蔓,有些請(qǐng)求是需要后臺(tái)處理的,有些請(qǐng)求是不需要經(jīng)過(guò)后臺(tái)處理的(如:css讹堤、html吆鹤、jpg、js等等文件)洲守,這些不需要經(jīng)過(guò)后臺(tái)處理的文件稱(chēng)為靜態(tài)文件疑务。讓動(dòng)態(tài)網(wǎng)站里的動(dòng)態(tài)網(wǎng)頁(yè)根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開(kāi)來(lái),動(dòng)靜資源做好了拆分以后梗醇,我們就可以根據(jù)靜態(tài)資源的特點(diǎn)將其做緩存操作知允。提高資源響應(yīng)的速度。
目前叙谨,通過(guò)使用Nginx大大提高了我們網(wǎng)站的響應(yīng)速度温鸽,優(yōu)化了用戶(hù)體驗(yàn),讓網(wǎng)站的健壯性更上一層樓手负!
Nginx的安裝
windows下安裝
1涤垫、下載nginx
http://nginx.org/en/download.html 下載穩(wěn)定版本。
以nginx/Windows-1.16.1為例竟终,直接下載 nginx-1.16.1.zip蝠猬。
下載后解壓,解壓后如下:
2衡楞、啟動(dòng)nginx
有很多種方法啟動(dòng)nginx
(1)直接雙擊nginx.exe吱雏,雙擊后一個(gè)黑色的彈窗一閃而過(guò)
(2)打開(kāi)cmd命令窗口敦姻,切換到nginx解壓目錄下瘾境,輸入命令 nginx.exe
,回車(chē)即可
3镰惦、檢查nginx是否啟動(dòng)成功
直接在瀏覽器地址欄輸入網(wǎng)址 http://localhost:80 回車(chē)迷守,出現(xiàn)以下頁(yè)面說(shuō)明啟動(dòng)成功!
4旺入、配置監(jiān)聽(tīng)
nginx的配置文件是conf目錄下的nginx.conf兑凿,默認(rèn)配置的nginx監(jiān)聽(tīng)的端口為80,如果80端口被占用可以修改為未被占用的端口即可茵瘾。
當(dāng)我們修改了nginx的配置文件nginx.conf 時(shí)礼华,不需要關(guān)閉nginx后重新啟動(dòng)nginx,只需要執(zhí)行命令 nginx -s reload
即可讓改動(dòng)生效
5拗秘、關(guān)閉nginx
如果使用cmd命令窗口啟動(dòng)nginx圣絮, 關(guān)閉cmd窗口是不能結(jié)束nginx進(jìn)程的,可使用兩種方法關(guān)閉nginx
(1)輸入nginx命令 nginx -s stop
(快速停止nginx) 或 nginx -s quit
(完整有序的停止nginx)
(2)使用taskkill taskkill /f /t /im nginx.exe
taskkill是用來(lái)終止進(jìn)程的雕旨,
/f是強(qiáng)制終止 .
/t終止指定的進(jìn)程和任何由此啟動(dòng)的子進(jìn)程扮匠。
/im示指定的進(jìn)程名稱(chēng) .
linux下安裝
1捧请、安裝gcc
安裝 nginx 需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴(lài) gcc 環(huán)境棒搜,如果沒(méi)有 gcc 環(huán)境疹蛉,則需要安裝:
yum install gcc-c++
2、PCRE pcre-devel 安裝
PCRE(Perl Compatible Regular Expressions) 是一個(gè)Perl庫(kù)力麸,包括 perl 兼容的正則表達(dá)式庫(kù)可款。nginx 的 http 模塊使用 pcre 來(lái)解析正則表達(dá)式,所以需要在 linux 上安裝 pcre 庫(kù)克蚂,pcre-devel 是使用 pcre 開(kāi)發(fā)的一個(gè)二次開(kāi)發(fā)庫(kù)筑舅。nginx也需要此庫(kù)。命令:
yum install -y pcre pcre-devel
3陨舱、zlib 安裝
zlib 庫(kù)提供了很多種壓縮和解壓縮的方式翠拣, nginx 使用 zlib 對(duì) http 包的內(nèi)容進(jìn)行 gzip ,所以需要在 Centos 上安裝 zlib 庫(kù)游盲。
yum install -y zlib zlib-devel
4误墓、OpenSSL 安裝
OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法益缎、常用的密鑰和證書(shū)封裝管理功能及 SSL 協(xié)議谜慌,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
nginx 不僅支持 http 協(xié)議莺奔,還支持 https(即在ssl協(xié)議上傳輸http)欣范,所以需要在 Centos 安裝 OpenSSL 庫(kù)。
yum install -y openssl openssl-devel
5令哟、下載安裝包
手動(dòng)下載.tar.gz安裝包恼琼,地址:https://nginx.org/en/download.html
下載完畢上傳到服務(wù)器上 /root
6、解壓
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
7屏富、配置
使用默認(rèn)配置晴竞,在nginx根目錄下執(zhí)行
./configure
make
make install
查找安裝路徑: whereis nginx
Nginx常用命令
cd /usr/local/nginx/sbin/
./nginx 啟動(dòng)
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加載配置文件
ps aux|grep nginx 查看nginx進(jìn)程
啟動(dòng)成功訪(fǎng)問(wèn) 服務(wù)器ip:80
注意:如何連接不上,檢查阿里云安全組是否開(kāi)放端口狠半,或者服務(wù)器防火墻是否開(kāi)放端口噩死!
相關(guān)命令:
# 開(kāi)啟
service firewalld start
# 重啟
service firewalld restart
# 關(guān)閉
service firewalld stop
# 查看防火墻規(guī)則
firewall-cmd --list-all
# 查詢(xún)端口是否開(kāi)放
firewall-cmd --query-port=8080/tcp
# 開(kāi)放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重啟防火墻(修改配置后要重啟防火墻)
firewall-cmd --reload
# 參數(shù)解釋
1、firwall-cmd:是Linux提供的操作firewall的一個(gè)工具神年;
2已维、--permanent:表示設(shè)置為持久;
3已日、--add-port:標(biāo)識(shí)添加的端口垛耳;