nginx學習筆記
一、Nginx簡介(相關概念)
- 什麼是nginx
-
Nginx (engine x) 是一個高效能的HTTP和反向代理web伺服器,特點是佔有記憶體少,併發能力強,事實上nginx的併發能力在同類型的網頁伺服器中表現較好。
-
Nginx專為效能優化而開發,效能是其重要的考量,實現上非常注重效率,能經受高負載的考驗,能支援高達50000個併發連線數
-
反向代理
- 正向代理:在客戶端(瀏覽器)配置代理伺服器,通過代理伺服器進行網際網路訪問
- 反向代理:客戶端對代理是無感知的。客戶端傳送請求到代理伺服器,由代理伺服器去選擇目標伺服器獲取資料後,再返回給客戶端。此時,對於客戶端來說,反向代理伺服器和目標伺服器就是一個伺服器,暴露的是代理伺服器地址,隱藏了真實伺服器ip地址
個人理解:"正向代理"是代理客戶端(瀏覽器)的,"反向代理"是代理伺服器的
-
負載均衡
單個伺服器解決不了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上的情況改為將請求分發到多個伺服器上,將負載分發到不同的伺服器,也就是我們所說的負載均衡。
-
動靜分離
為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的伺服器來解析,加快解析速度,降低原來單個伺服器的壓力。
二、常用命令
-
使用nginx命令,首先要進入/usr/local/nginx/sbin目錄
-
檢視nginx版本號
-
啟動nginx
-
關閉nginx
-
重新載入nginx
[[email protected] sbin]# pwd
/usr/local/nginx/sbin
[[email protected] sbin]# ./nginx -v
nginx version: nginx/1.14.2
[[email protected] sbin]# ./nginx -s stop
[[email protected] sbin]# ps -ef|grep nginx
root 2397 2266 0 17:49 pts/0 00:00:00 grep nginx
[[email protected] sbin]# ./nginx
[ [email protected] sbin]# ps -ef|grep nginx
root 2399 1 0 17:49 ? 00:00:00 nginx: master process ./nginx
nobody 2400 2399 0 17:49 ? 00:00:00 nginx: worker process
root 2402 2266 0 17:49 pts/0 00:00:00 grep nginx
[[email protected] sbin]# ./nginx -s reload
三、配置檔案
-
路徑:/usr/local/nginx/conf/nginx.conf
-
組成:
-
全域性塊:
從配置檔案開始,到events塊之間的內容,主要設定一些影響nginx伺服器整體執行的配置指令
例如:worker_processes 1; 值越大,可以支援的併發處理量也越多
-
events塊:
主要配置影響Nginx伺服器與使用者的網路連線
例如:worker_connections 1024; 支援的最大連線數
-
http塊
配置最頻繁
包括http全域性塊、server塊
-
四、Nginx安裝
五、Nginx配置Demo
以下Demo的執行環境:nginx1.14.2版本,安裝在虛擬機器centos6.8上面。tomcat安裝在win10系統上。
六、Nginx原理
1個master:管理、監控
1個或多個worker:執行
客戶端請求master時,worker來爭搶請求
問題1:一個master和多個worker的好處
- 可以使用nginx -s reload熱部署(reload時,沒任務的workerreload,有任務的繼續做任務,做完了再reload)
- 每個worker是個獨立的程序,不需要加鎖,效率高
- 多個獨立的worker,如果其中的一個worker掛了,其他worker不受影響,服務不會中斷
問題2:設定多少個worker合適
底層採用io多路複用機制,每個worker都是一個獨立的程序,但每個程序裡只有一個主執行緒,通過非同步非阻塞的方式來處理請求,即使是上萬個請求也不在話下,每個worker的執行緒可以把一個cpu的效能發揮到極致,所以worker數和伺服器的cup數相等時最為適宜。設少了浪費cpu,多了造成cpu頻繁切換上下文帶來的損耗。
問題3:傳送一個請求,佔用worker幾個連線數?
2個或4個。
訪問靜態資源時,nginx找到靜態資源伺服器,把資源直接返回,佔用2個連線;
訪問動態資源,nginx訪問tomcat,就佔用4個連線。
問題4:nginx有1個master,6個worker,每個worker支援最大連線數是1024,支援最大併發數是多少?
若全都訪問靜態資源,最大併發=worker_connections*worker_process/2 (1024*6/2)
若全都訪問動態資源,最大併發=worker_connections*worker_process/4 (1024*6/4)