Nginx (“engine x”) 是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國(guó)大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了朝天免費(fèi)建站歡迎大家使用!2、Nginx 作為 web 服務(wù)器Nginx 可以作為靜態(tài)頁面的 web 服務(wù)器,同時(shí)還支持 CGI 協(xié)議的動(dòng)態(tài)語言,比如 perl、php等。但是不支持 java。Java 程序只能通過與 tomcat 配合完成。Nginx 專為性能優(yōu)化而開發(fā),性能是其最重要的考量,實(shí)現(xiàn)上非常注重效率 ,能經(jīng)受高負(fù)載的考驗(yàn),有報(bào)告表明能支持高達(dá) 50,000 個(gè)并發(fā)連接數(shù)。
https://lnmp.org/nginx.html
3、正向代理 4、反向代理反向代理,其實(shí)客戶端對(duì)代理是無感知的,因?yàn)榭蛻舳瞬恍枰魏闻渲镁涂梢栽L問,我們只需要將請(qǐng)求發(fā)送到反向代理服務(wù)器,由反向代理服務(wù)器去選擇目標(biāo)服務(wù)器獲取數(shù)據(jù)后,在返回給客戶端,此時(shí)反向代理服務(wù)器和目標(biāo)服務(wù)器對(duì)外就是一個(gè)服務(wù)器,暴露的是代理服務(wù)器地址,隱藏了真實(shí)服務(wù)器 IP 地址。
5、負(fù)載均衡客戶端發(fā)送多個(gè)請(qǐng)求到服務(wù)器,服務(wù)器處理請(qǐng)求,有一些可能要與數(shù)據(jù)庫(kù)進(jìn)行交互,服務(wù)器處理完畢后,再將結(jié)果返回給客戶端。
這種架構(gòu)模式對(duì)于早期的系統(tǒng)相對(duì)單一,并發(fā)請(qǐng)求相對(duì)較少的情況下是比較適合的,成本也低。但是隨著信息數(shù)量的不斷增長(zhǎng),訪問量和數(shù)據(jù)量的飛速增長(zhǎng),以及系統(tǒng)業(yè)務(wù)的復(fù)雜度增加,這種架構(gòu)會(huì)造成服務(wù)器相應(yīng)客戶端的請(qǐng)求日益緩慢,并發(fā)量特別大的時(shí)候,還容易造成服務(wù)器直接崩潰。很明顯這是由于服務(wù)器性能的瓶頸造成的問題,那么如何解決這種情況呢?
我們首先想到的可能是升級(jí)服務(wù)器的配置,比如提高 CPU 執(zhí)行頻率,加大內(nèi)存等提高機(jī)器的物理性能來解決此問題,但是我們知道摩爾定律的日益失效,硬件的性能提升已經(jīng)不能滿足日益提升的需求了。最明顯的一個(gè)例子,天貓雙十一當(dāng)天,某個(gè)熱銷商品的瞬時(shí)訪問量是極其龐大的,那么類似上面的系統(tǒng)架構(gòu),將機(jī)器都增加到現(xiàn)有的頂級(jí)物理配置,都是不能夠滿足需求的。那么怎么辦呢?
上面的分析我們?nèi)サ袅嗽黾臃?wù)器物理配置來解決問題的辦法,也就是說縱向解決問題的辦法行不通了,那么橫向增加服務(wù)器的數(shù)量呢?這時(shí)候集群的概念產(chǎn)生了,單個(gè)服務(wù)器解決不了,我們?cè)黾臃?wù)器的數(shù)量,然后將請(qǐng)求分發(fā)到各個(gè)服務(wù)器上,將原先請(qǐng)求集中到單個(gè)服務(wù)器上的情況改為將請(qǐng)求分發(fā)到多個(gè)服務(wù)器上,將負(fù)載分發(fā)到不同的服務(wù)器,也就是我們所說的負(fù)載均衡。
6、動(dòng)靜分離為了加快網(wǎng)站的解析速度,可以把動(dòng)態(tài)頁面和靜態(tài)頁面由不同的服務(wù)器來解析,加快解析速度。降低原來單個(gè)服務(wù)器的壓力。
二、Nginx 安裝 1、準(zhǔn)備工作(1)打開虛擬機(jī),使用遠(yuǎn)程連接工具連接 linux 操作系統(tǒng)
(2)查看 nginx 官網(wǎng):http://nginx.org/
(2)nginx相關(guān)依賴
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
說下這幾個(gè)的作用:
2、開始進(jìn)行 nginx 安裝1.gcc 可以編譯 C,C++,Ada,Object C和Java等語言(安裝 nginx 需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴 gcc 環(huán)境)
2.pcre pcre-devel pcre是一個(gè)perl庫(kù),包括perl兼容的正則表達(dá)式庫(kù),nginx的http模塊使用pcre來解析正則表達(dá)式,所以需要安裝pcre庫(kù)
3.zlib zlib-devel zlib庫(kù)提供了很多種壓縮和解壓縮方式nginx使用zlib對(duì)http包的內(nèi)容進(jìn)行g(shù)zip,所以需要安裝
4.openssl openssl-devel OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
nginx 不僅支持 http 協(xié)議,還支持 https(即在ssl協(xié)議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫(kù)
從centos 8開始,nginx軟件包在默認(rèn)的centos存儲(chǔ)庫(kù)中可用。在centos 8上安裝nginx只需輸入以下內(nèi)容即可:
yum install nginx -y
安裝完成后,使用以下命令啟用并啟動(dòng)nginx服務(wù):
nginx
要驗(yàn)證服務(wù)是否正在運(yùn)行,請(qǐng)檢查其狀態(tài):
ps -ef | grep nginx
nginx默認(rèn)安裝目錄為:
/etc/nginx
調(diào)整防火墻
firewalld是centos 8上的默認(rèn)防火墻解決方案。
在安裝過程中,nginx使用預(yù)定義的規(guī)則創(chuàng)建防火墻服務(wù)文件,以允許訪問http(80)和https(443)端口。
安裝后,不能訪問的,需要對(duì)防火墻進(jìn)行設(shè)置
也可以直接關(guān)閉防火墻,并防止自啟(在練習(xí)模式中)
//關(guān)閉防火墻&&防火墻自啟
systemctl stop firewalld && systemctl disable firewalld
//安裝Iptables管理工具&&啟動(dòng)Iptables&&設(shè)為Iptables開機(jī)自啟&&清空Iptables規(guī)則&&保存Iptables默認(rèn)規(guī)則
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables&& iptables -F && service iptables save
①查看開放的端口
systemctl start firewalld.service
firewall-cmd --list-all
②設(shè)置開放的端口號(hào)
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=80/tcp --permanent
③設(shè)置之后需要重啟防火墻
firewall-cmd --reload
④現(xiàn)在,您可以通過http://your_ip在web瀏覽器中打開來測(cè)試nginx的安裝。您應(yīng)該看到默認(rèn)的nginx歡迎頁面,其外觀應(yīng)類似于下圖:
三、Nginx 常用的命令和配置文件 1、nginx 常用的命令啟動(dòng)命令
nginx
查看是否啟動(dòng)成功
ps -ef|grep nginx
立即關(guān)閉命令
nginx -s stop
從容關(guān)閉命令
這種方法較stop相比就比較溫和一些了,需要進(jìn)程完成當(dāng)前工作后再停止。
nginx -s quit
重新加載命令
nginx -s reload
查詢版本號(hào)
nginx -v
2、nginx.conf 配置文件查找安裝路徑
whereis nginx
(centos 8中)位置:/etc/nginx
nginx 安裝目錄下,其默認(rèn)的配置文件都放在這個(gè)目錄的 conf 目錄下,而主配置文件nginx.conf 也在其中,后續(xù)對(duì) nginx 的使用基本上都是對(duì)此配置文件進(jìn)行相應(yīng)的修改
配置文件中有很多#, 開頭的表示注釋內(nèi)容,我們?nèi)サ羲幸?# 開頭的段落,精簡(jiǎn)之后的內(nèi)容如下:
根據(jù)上述文件,我們可以很明顯的將 nginx.conf 配置文件分為三部分:
第一部分:全局塊
從配置文件開始到 events 塊之間的內(nèi)容,主要會(huì)設(shè)置一些影響 nginx 服務(wù)器整體運(yùn)行的配置指令,主要包括配置運(yùn)行 Nginx 服務(wù)器的用戶(組)、允許生成的 worker process 數(shù),進(jìn)程 PID 存放路徑、日志存放路徑和類型以及配置文件的引入等。
比如上面第一行配置的:worker_processes 1
這是 Nginx 服務(wù)器并發(fā)處理服務(wù)的關(guān)鍵配置,worker_processes值越大,可以支持的并發(fā)處理量也越多,但是會(huì)受到硬件、軟件等設(shè)備的制約
第二部分: events 塊
比如上面的配置:worker_connections 1024
events 塊涉及的指令主要影響 Nginx 服務(wù)器與用戶的網(wǎng)絡(luò)連接,常用的設(shè)置包括是否開啟對(duì)多 work process下的網(wǎng)絡(luò)連接進(jìn)行序列化,是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接,選取哪種事件驅(qū)動(dòng)模型來處理連接請(qǐng)求,worker_connections,每個(gè) wordprocess 可以同時(shí)支持的大連接數(shù)等。
上述例子就表示每個(gè) work process 支持的大連接數(shù)為 1024.這部分的配置對(duì) Nginx 的性能影響較大,在實(shí)際中應(yīng)該靈活配置。
第三部分: http 塊
這算是 Nginx 服務(wù)器配置中最頻繁的部分,代理、緩存和日志定義等絕大多數(shù)功能和第三方模塊的配置都在這里。
需要注意的是:http 塊也可以包括 http 全局塊、server 塊。
①、http 全局塊
http 全局塊配置的指令包括文件引入、MIME-TYPE 定義、日志自定義、連接超時(shí)時(shí)間、單鏈接請(qǐng)求數(shù)上限等。
②、server 塊
這塊和虛擬主機(jī)有密切關(guān)系,虛擬主機(jī)從用戶角度看,和一臺(tái)獨(dú)立的硬件主機(jī)是完全一樣的,該技術(shù)的產(chǎn)生是為了節(jié)省互聯(lián)網(wǎng)服務(wù)器硬件成本。
每個(gè) http 塊可以包括多個(gè) server 塊,而每個(gè) server 塊就相當(dāng)于一個(gè)虛擬主機(jī)。而每個(gè) server 塊也分為全局 server 塊,以及可以同時(shí)包含多個(gè) locaton 塊。
1、全局 server 塊
最常見的配置是本虛擬機(jī)主機(jī)的監(jiān)聽配置和本虛擬主機(jī)的名稱或 IP 配置。
2、location 塊
? 一個(gè) server 塊可以配置多個(gè) location 塊。
這塊的主要作用是基于 Nginx 服務(wù)器接收到的請(qǐng)求字符串(例如 server_name/uri-string),對(duì)虛擬主機(jī)名稱(也可以是 IP 別名)之外的字符串(例如 前面的 /uri-string)進(jìn)行匹配,對(duì)特定的請(qǐng)求進(jìn)行處理。地址定向、數(shù)據(jù)緩存和應(yīng)答控制等功能,還有許多第三方模塊的配置也在這里進(jìn)行。
四、nginx 配置實(shí)例- 反向代理 反向代理實(shí)例一實(shí)現(xiàn)效果:打開瀏覽器,在瀏覽器地址欄輸入地址 www.123.com,跳轉(zhuǎn)到 liunx 系統(tǒng) tomcat 主頁面中。
1、準(zhǔn)備工作
(1)在 liunx 系統(tǒng)安裝 tomcat,使用默認(rèn)端口 8080
(2)對(duì)外開放訪問的端口?
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
查看已經(jīng)開放的端口號(hào)
firewall-cmd --list-all
(3)在 windows 系統(tǒng)中通過瀏覽器訪問 tomcat 服務(wù)器
2、訪問過程的分析
3、具體配置
第一步 在 windows(win 11) 系統(tǒng)的 host 文件進(jìn)行域名和 ip 對(duì)應(yīng)關(guān)系的配置
添加內(nèi)容在 host 文件中
第二步 在 nginx 進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)的配置(反向代理配置)
第三步 啟動(dòng)nginx或重啟nginx?
4、最終測(cè)試
反向代理實(shí)例二1、實(shí)現(xiàn)效果
使用 nginx 反向代理,根據(jù)訪問的路徑跳轉(zhuǎn)到不同端口的服務(wù)中
nginx 監(jiān)聽端口為 9001,
訪問 http://192.168.17.129:9001/edu/ 直接跳轉(zhuǎn)到 127.0.0.1:8080
訪問 http:// 192.168.17.129:9001/vod/ 直接跳轉(zhuǎn)到 127.0.0.1:8081
2、準(zhǔn)備工作
(1)準(zhǔn)備兩個(gè) tomcat 服務(wù)器,一個(gè) 8080 端口,一個(gè) 8081 端口
(2)創(chuàng)建文件夾和測(cè)試頁面
3、具體配置
(1)找到 nginx 配置文件,進(jìn)行反向代理配置
(2)開放對(duì)外訪問的端口號(hào) 9001 8080 8081
4、最終測(cè)試
location 指令說明
該指令用于匹配 URL。
語法如下:
1、= :用于不含正則表達(dá)式的 uri 前,要求請(qǐng)求字符串與 uri 嚴(yán)格匹配,如果匹配
成功,就停止繼續(xù)向下搜索并立即處理該請(qǐng)求。
2、~:用于表示 uri 包含正則表達(dá)式,并且區(qū)分大小寫。
3、~ *:用于表示 uri 包含正則表達(dá)式,并且不區(qū)分大小寫。
4、^~:用于不含正則表達(dá)式的 uri 前,要求 Nginx 服務(wù)器找到標(biāo)識(shí) uri 和請(qǐng)求字
符串匹配度最高的 location 后,立即使用此 location 處理請(qǐng)求,而不再使用 location
塊中的正則 uri 和請(qǐng)求字符串做匹配。
注意:如果 uri 包含正則表達(dá)式,則必須要有 ~ 或者 ~ * 標(biāo)識(shí)。
五、nginx 配置實(shí)例-負(fù)載均衡1、實(shí)現(xiàn)效果
(1)瀏覽器地址欄輸入地址 http://192.168.17.129/edu/a.html,負(fù)載均衡效果,平均 8080和 8081 端口中
2、準(zhǔn)備工作
(1)準(zhǔn)備兩臺(tái) tomcat 服務(wù)器,一臺(tái) 8080,一臺(tái) 8081
(2)在兩臺(tái) tomcat 里面 webapps 目錄中,創(chuàng)建名稱是 edu 文件夾,在 edu 文件夾中創(chuàng)建
頁面 a.html,用于測(cè)試
3、在 nginx 的配置文件中進(jìn)行負(fù)載均衡的配置
4、nginx 分配服務(wù)器策略
第一種 輪詢(默認(rèn))
每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器 down 掉,能自動(dòng)剔除。
第二種 weight
weight 代表權(quán)重默認(rèn)為 1,權(quán)重越高被分配的客戶端越多
第三種 ip_hash
每個(gè)請(qǐng)求按訪問 ip 的 hash 結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器
第四種 fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。
六、nginx 配置實(shí)例- 動(dòng)靜分離1、什么是動(dòng)靜分離?
Nginx 動(dòng)靜分離簡(jiǎn)單來說就是把動(dòng)態(tài)跟靜態(tài)請(qǐng)求分開,不能理解成只是單純的把動(dòng)態(tài)頁面和靜態(tài)頁面物理分離。嚴(yán)格意義上說應(yīng)該是動(dòng)態(tài)請(qǐng)求跟靜態(tài)請(qǐng)求分開,可以理解成使用 Nginx處理靜態(tài)頁面,Tomcat 處理動(dòng)態(tài)頁面。動(dòng)靜分離從目前實(shí)現(xiàn)角度來講大致分為兩種,一種是純粹把靜態(tài)文件獨(dú)立成單獨(dú)的域名,放在獨(dú)立的服務(wù)器上,也是目前主流推崇的方案;另外一種方法就是動(dòng)態(tài)跟靜態(tài)文件混合在一起發(fā)布,通過 nginx 來分開。
通過 location 指定不同的后綴名實(shí)現(xiàn)不同的請(qǐng)求轉(zhuǎn)發(fā)。通過 expires 參數(shù)設(shè)置,可以使瀏覽器緩存過期時(shí)間,減少與服務(wù)器之前的請(qǐng)求和流量。具體 Expires 定義:是給一個(gè)資源設(shè)定一個(gè)過期時(shí)間,也就是說無需去服務(wù)端驗(yàn)證,直接通過瀏覽器自身確認(rèn)是否過期即可,所以不會(huì)產(chǎn)生額外的流量。此種方法非常適合不經(jīng)常變動(dòng)的資源。(如果經(jīng)常更新的文件,不建議使用 Expires 來緩存),我這里設(shè)置 3d,表示在這 3 天之內(nèi)訪問這個(gè) URL,發(fā)送一個(gè)請(qǐng)求,比對(duì)服務(wù)器該文件最后更新時(shí)間沒有變化,則不會(huì)從服務(wù)器抓取,返回狀態(tài)碼 304,如果有修改,則直接從服務(wù)器重新下載,返回狀態(tài)碼 200。
2、準(zhǔn)備工作
在 liunx 系統(tǒng)中準(zhǔn)備靜態(tài)資源,用于進(jìn)行訪問
3、具體配置
在 nginx 配置文件中進(jìn)行配置
4、最終測(cè)試
(1)瀏覽器中輸入地址
http://192.168.17.129/image/01.jpg
因?yàn)榕渲梦募?autoindex on
重點(diǎn)是添加 location,最后檢查 Nginx 配置是否正確即可,然后測(cè)試動(dòng)靜分離是否成功,之需要?jiǎng)h除后端 tomcat服務(wù)器上的某個(gè)靜態(tài)文件,查看是否能訪問,如果可以訪問說明靜態(tài)資源 nginx 直接返回了,不走后端 tomcat 服務(wù)器。
七、nginx 原理1、mater 和 worker
2、worker 如何進(jìn)行工作的
3、一個(gè) master 和多個(gè) woker 有好處
(1)可以使用 nginx –s reload 熱部署,利用 nginx 進(jìn)行熱部署操作
(2)每個(gè) woker 是獨(dú)立的進(jìn)程,如果有其中的一個(gè) woker 出現(xiàn)問題,其他 woker 獨(dú)立的,
繼續(xù)進(jìn)行爭(zhēng)搶,實(shí)現(xiàn)請(qǐng)求過程,不會(huì)造成服務(wù)中斷
4、設(shè)置多少個(gè) woker 合適
worker 數(shù)和服務(wù)器的 cpu 數(shù)相等是最為適宜的
5、連接數(shù) worker_connection
第一個(gè):發(fā)送請(qǐng)求,占用了 woker 的幾個(gè)連接數(shù)?
答案:2 或者 4 個(gè)
第二個(gè):nginx 有一個(gè) master,有四個(gè) woker,每個(gè) woker 支持大的連接數(shù) 1024,支持的
大并發(fā)數(shù)是多少?
l 普通的靜態(tài)訪問大并發(fā)數(shù)是: worker_connections * worker_processes /2,
l 而如果是 HTTP 作 為反向代理來說,大并發(fā)數(shù)量應(yīng)該是 worker_connections *
worker_processes/4。
八、nginx 搭建高可用集群0、高可用集群
問題
高可用
1、需要兩臺(tái)+的nginx服務(wù)器
2、虛擬ip
3、keepalived
配置高可用準(zhǔn)備工作
在兩臺(tái)服務(wù)器安裝keepalived
使用yum命令安裝
yum install keepalived -y
安裝之后,在 etc 里面生成目錄 keepalived ,有文件 keepalived.conf
1、Keepalived+Nginx 高可用集群
修改/etc/keepalived/keepalivec.conf 配置文件
#全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129 #主機(jī)ip
smtp_connect_timeout 30
router_id LVS_DEVEL #服務(wù)器域名名字,可在/etc/hosts中查看127.0.0.1映射的域名
}
#腳本配置
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"#腳本路徑
interval 2 #(檢測(cè)腳本執(zhí)行的間隔);每隔2s檢查一次
weight 2 #設(shè)置服務(wù)器權(quán)重
}
#虛擬ip的配置
vrrp_instance VI_1 {
state BACKUP # Master為Master;Salve為BACKUP
interface ens33 #網(wǎng)卡;可以用ip addr 看網(wǎng)卡名
virtual_router_id 51 # 主、備機(jī)的 virtual_router_id 必須相同
priority 90 # 主、備機(jī)取不同的優(yōu)先級(jí),主機(jī)值較大,備份機(jī)值較小
advert_int 1 #每1s發(fā)送一次心跳
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虛擬ip地址,多臺(tái)keepalived綁定一個(gè)ip;必須同一網(wǎng)段
}
}
在/usr/local/src 添加檢測(cè)腳本
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #nginx啟動(dòng)路徑
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived #nginx掛掉后,殺掉這個(gè)服務(wù)器的所有keepalived進(jìn)程
fi
fi
把兩臺(tái)服務(wù)器上 nginx 和 和 keepalived 啟動(dòng)
啟動(dòng) nginx :
./nginx
啟動(dòng) keepalived :
systemctl start keepalived.service
把主服務(wù)器(192.168.17.129 )nginx 和 和 keepalived 停止,再輸入 192.168.17.50
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧