前言
公司產(chǎn)品出現(xiàn)瓶頸?
公司項(xiàng)目剛剛上線的時(shí)候,并發(fā)量小,用戶使用的少,所以在低并發(fā)的情況下,一個(gè)jar包啟動(dòng)應(yīng)用就夠了,然后內(nèi)部tomcat返回內(nèi)容給用戶。
但是慢慢的,使用我們平臺(tái)的用戶越來(lái)越多了,并發(fā)量慢慢增大了,這時(shí)候一臺(tái)服務(wù)器滿足不了我們的需求了。
于是我們橫向擴(kuò)展,又增加了服務(wù)器。這個(gè)時(shí)候幾個(gè)項(xiàng)目啟動(dòng)在不同的服務(wù)器上,用戶要訪問(wèn),就需要增加一個(gè)代理服務(wù)器了,通過(guò)代理服務(wù)器來(lái)幫我們轉(zhuǎn)發(fā)和處理請(qǐng)求。
我們希望這個(gè)代理服務(wù)器可以幫助我們接收用戶的請(qǐng)求,然后將用戶的請(qǐng)求按照規(guī)則幫我們轉(zhuǎn)發(fā)到不同的服務(wù)器節(jié)點(diǎn)之上。這個(gè)過(guò)程用戶是無(wú)感知的,用戶并不知道是哪個(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)槎砹_斯訪問(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ā)能力在同類型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好,中國(guó)大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(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ǔ)言從頭寫成。官方數(shù)據(jù)測(cè)試表明能夠支持高達(dá) 50,000 個(gè)并發(fā)連接數(shù)的響應(yīng)。
Nginx作用?
Http代理,反向代理:作為web服務(wù)器最常用的功能之一,尤其是反向代理。
正向代理
反向代理
Nginx提供的負(fù)載均衡策略有2種:內(nèi)置策略和擴(kuò)展策略。內(nèi)置策略為輪詢,加權(quán)輪詢,Ip hash。擴(kuò)展策略,就天馬行空,只有你想不到的沒(méi)有他做不到的。
輪詢
加權(quán)輪詢
iphash對(duì)客戶端請(qǐng)求的ip進(jìn)行hash操作,然后根據(jù)hash結(jié)果將同一個(gè)客戶端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)處理的文件稱為靜態(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)化了用戶體驗(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
,回車即可
3、檢查nginx是否啟動(dòng)成功
直接在瀏覽器地址欄輸入網(wǎng)址 http://localhost:80 回車,出現(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)程名稱 .
linux下安裝
1、安裝gcc
安裝 nginx 需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴 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ù),囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 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)成功訪問(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
# 查詢端口是否開(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í)添加的端口;