1、Nginx基礎知識
1.1認識Nginx
百科給出的解釋:
總結:
Nginx是一個高性能的Http和反向代理web服務器。
Nginx特點:
1、跨平臺Nginx可以在?多數類unix操作系統上編譯運?,?且也有windows版本。
2、Nginx學習成本比較低。
3、高并發(fā)、性能好。
4、穩(wěn)定性好、宕機概率低。
1.2Nginx核心運用場景
1.2.1Http服務器
性能?常?,?常注重效率,能夠經受?負載的考驗。
?持50000個并發(fā)連接數,不僅如此,CPU和內存的占?也?常的低,10000個沒有活動的連接才占?2.5M的內存。
1.2.2反向代理服務器
正向代理
在瀏覽器中配置代理服務器信息,通過代理服務器訪問目標網站,代理服務器收到目標網站的響應之后,會把響應信息返回給我們的瀏覽器上?!竞唵卫斫饩褪峭ㄟ^代理服務器去訪問一個網點】
正向代理圖解
反向代理
瀏覽器客戶端發(fā)送請求到反向代理服務器(?如Nginx),由反向代理服務器去選擇原始服務器提供服務獲取結果響應,最終再返回給客戶端瀏覽器?!菊f白了就是 就是客戶端看不到真實的服務器,看到的都是代理服務器,而這個代理服務器將請求轉發(fā)到真實的服務器獲取到響應這個過程稱之為反向代理】
正向代理和反向代理的區(qū)別:
正向代理是通過代理服務器去連接到一個網站,而這個代理服務器屬于一個媒介,就算是沒有代理服務器,要訪問的網站也是對外可見的。
反向代理一般反向代理服務器和網站真實的服務器(比如Tomcat服務器)是一體的,真實的服務器對外是不可見的,只能通過反向代理服務器去訪問。
1.2.3負載均衡服務器
負載均衡的思想:當反向代理服務器收到請求之后會把請求轉發(fā)給真實的服務器,如果真實的服務器很多的時候,會按照一定的算法分發(fā)給其中的一臺服務器。如果請求量非常大的時候,負載均衡就是將請求分發(fā)給各個真實的服務器來有效達到降低真實服務器的壓力。這個就是負載均衡的思想。
1.2.4動靜分離
動靜分離思想就是說,由Nginx服務器直接托管靜態(tài)資源,當用戶請求的時候判斷如果是靜態(tài)資源的話直接通過Nginx返回給客戶端,如果是動態(tài)資源的話在請求轉發(fā)給真實的服務器。用來降低服務器的真實壓力。
2、Nginx基礎使用
2.1Nginx安裝
下載地址 http://nginx.org/en/download.html下載之后上傳到自己的服務器上進行解壓,在這里我使用的是nginx-1.17.8版。
進入解壓之后的目錄。
1)安裝nginx的依賴pcre、openssl、gcc、zlib
執(zhí)行:yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2)執(zhí)行 ./configure 命令【如果出現權限不夠的話需要自己修改權限 chmod +x configure這個命令修改】
3)執(zhí)行make 命令 進行編譯。
4)執(zhí)行make install命令進行安裝。
這個時候已經安裝好了,安裝的目錄在/usr/local/nginx
啟動nginx服務器 cd /usr/local/nginx ./sbin/nginx
查看是否運行 ps -ef | grep nginx
如果出現兩個進程證明nginx已經安裝好了,直接訪問自己服務器的ip就能訪問,默認監(jiān)聽的是80端口。
2.2Nginx常用命令
./nginx 啟動nginx
./nginx -s stop 終?nginx(當然也可以找到nginx進程號,然后使?kill -9 殺掉nginx進程)
./nginx -s reload (重新加載nginx.conf配置?件)
2.3Nginx配置文件概述
Nginx核心配置文件nginx.conf
分三個模塊全局快、events塊、http塊。
1、 全局塊
從配置?件開始到events塊之間的內容,此處的配置影響nginx服務器整體的運?,?如worker進
程的數量、錯誤?志的位置等
2、events塊
events塊主要影響nginx服務器與?戶的?絡連接,?如worker_connections 1024,標識每個
workderprocess?持的最?連接數為1024
3、http塊
http塊是配置最頻繁的部分,虛擬主機的配置,監(jiān)聽端?的配置,請求轉發(fā)、反向代理、負載均衡
等。
3、Nginx應用-反向代理服務器
3.1反向代理配置案例
需求1:通過本機的反向代理服務器訪問本機的Tomcat服務器。
首先啟動服務器上的tomcat服務器,修改配置文件。
在使用命令./stbin/nginx -s reload重新啟動就可以訪問本機上的tomcat服務器了。
需求2:我輸入localhost/abc可以訪問到tomcat1 輸入localhost/def訪問到tomcat2
首先需要在服務器上啟動兩個tomcat兩個tomcat端口號不能保持一致 比如8080 和 8081,然后在nginx中進行配置。
3.2location配置規(guī)則
對于location后邊跟的匹配規(guī)則:
①普通路徑 location /abc {... }
②正則匹配 location ~/abc {...}
③不區(qū)分??寫的正則匹配 location ~* /abc { }
④匹配路徑的前綴 location ^~ /abc { }
⑤精確匹配 location = /abc { }
優(yōu)先級⑤>④>③>②>①
4、Nginx應用-負載均衡
4.1Nginx基本使用
需求:訪問同一個url將流量打到不同的機器上。
首先準備兩個tomcat開啟兩個不同的端口然后對nginx進行配置。
4.2Nginx負載均衡策略
1、輪詢
默認策略,每個請求按時間順序逐?分配到不同的服務器,如果某?個服務器下線,能?動剔除
upstream hello{
server 127.0.0.1:8080;server 127.0.0.1:8082;
}
location /abc {
proxy_pass http://hello/;
}
2、weight權重
weight代表權重,默認每?個負載的服務器都為1,權重越?那么被分配的請求越多(?于服務器性能不均衡的場景)
upstream hello {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8080 weight=1;
}
3、ip_hash
每個請求按照ip的hash結果分配,每?個客戶端的請求會固定分配到同?個?標服務器處理,可以解決session問題。
upstream hello{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
5、Nginx應用-動靜分離
首先需要將靜態(tài)資源文件放在 /usr/local/nginx根目錄下
在根目錄下自定義一個文件夾 比如staticData在這個目錄下在創(chuàng)建一個static目錄等于現在靜態(tài)資源文件都放在/usr/local/nginx/staticData/static目錄下
Nginx配置文件:實在server下邊在創(chuàng)建一個標簽。
訪問路徑可以直接是http://127.0.0.1/static/helloworld.html
6、Nginx進程模型講解
6.1Nginx進程模型
Nginx啟動后,以多進程?式在后臺運?,包括?個Master進程和多個Worker進程,Master進程是領導,是??,Worker進程是?活的?弟。
master進程
主要是管理worker進程,?如:
1)接收外界信號向各worker進程發(fā)送信號(./nginx -s reload)。
2)監(jiān)控worker進程的運?狀態(tài),當worker進程異常退出后Master進程會?動重新啟動新的worker進程等。
worker進程
worker進程具體處理?絡請求。多個worker進程之間是對等的,他們同等競爭來?客戶端的請求,各進程互相之間是獨?的。?個請求,只可能在?個worker進程中處理,?個worker進程,不可能處理其它進程的請求。worker進程的個數是可以設置的,?般設置與機器cpu核數?致【直接在配置文件的第一行就能配置】。
模型圖
6.2命令處理說明
以 ./nginx -s reload 來說明nginx信號處理這部分
1)master進程對配置?件進?語法檢查
2)嘗試配置(?如修改了監(jiān)聽端?,那就嘗試分配新的監(jiān)聽端?)
3)嘗試成功則使?新的配置,新建worker進程
4)新建成功,給舊的worker進程發(fā)送關閉消息
5)舊的worker進程收到信號會繼續(xù)服務,直到把當前進程接收到的請求處理完畢后關閉所以reload之后worker進程pid是發(fā)?了變化的
在執(zhí)行完reload之后worker的pid發(fā)生了變化證明reload是從新創(chuàng)建了一個worker進程。
6.3worker進程處理請求部分的說明
例如,我們監(jiān)聽9003端?,?個請求到來時,如果有多個worker進程,那么每個worker進程都有
可能處理這個鏈接。
master進程創(chuàng)建之后,會建?好需要監(jiān)聽的的socket,然后從master進程再fork出多個worker進程。所以,所有worker進程的監(jiān)聽描述符listenfd在新連接到來時都變得可讀。
nginx使?互斥鎖來保證只有?個worker進程能夠處理請求,拿到互斥鎖的那個進程注冊listenfd讀事件,在讀事件?調?accept接受該連接,然后解析、處理、返回客戶端
6.4nginx多進程模型好處
1、每個worker進程都是獨?的,不需要加鎖,節(jié)省開銷
2、每個worker進程都是獨?的,互不影響,?個異常結束,其他的照樣能提供服務
3、多進程模型為reload熱部署機制提供了?撐