室友很喜歡打王者榮耀,不過每次都糾結選哪個英雄玩,Nginx完美解決

2022-01-05 16:00:02

一、百度百科

Nginx是一個高效能的HTTP和反向代理web伺服器,同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯存取量第二的Rambler.ru站點開發的,第一個公開版本0.1.0釋出於2004年10月4日。

其將原始碼以類BSD許可證的形式釋出,因它的穩定性、豐富的功能集、簡單的組態檔和低系統資源的消耗而聞名。

Nginx是一款輕量級的web伺服器及電子郵件(IMAP/POP3)代理伺服器,在BSD-like協定下發行。其特點是佔有記憶體少,並行能力強,事實上Nginx的並行能力在同型別的網頁伺服器中表現較好,中國大陸使用Nginx網站使用者有:阿里、百度、京東、新浪、網易、騰訊等。

二、Nginx作為web伺服器

Nginx可以作為靜態頁面的web伺服器,同時還提供CGI協定的動態語言,比如perl、php等。但是不支援java。Java只能通過與tomcat配合完成。Nginx專為效能優化而開發,效能是起最重要的考量,實現上非常注重效率,能經受高負載的考研,有報告表明能支援高達50000個並行連線數。

三、Nginx處理請求邏輯圖

在這裡插入圖片描述

四、Nginx的優點

  • 可以高並行連線;
  • 記憶體消耗少;
  • 成本低廉;
  • 組態檔非常簡單;
  • 支援Rewrite重寫(能夠根據域名、URL的不同,將http請求分到不同的後端伺服器群組。);
  • 內建的健康檢查功能;
  • 節省頻寬(支援GZIP壓縮,可以新增瀏覽器本地快取的Header頭。);
  • 穩定性高(用於反向代理,宕機的概率微乎其微。);
  • 支援熱部署;

五、Nginx應用場景

正向代理介紹

如果把區域網外的Internet想象成一個巨大的資源庫,則區域網中的使用者端要存取Internet,則需要通過代理伺服器來存取,這種代理服務就稱為正向代理。
在這裡插入圖片描述

1、反向代理

使用者端對代理是無感知的,因為使用者端不需要任何設定就可以存取,我們只需要將請求傳送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取資料,再返回給使用者端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴露的是代理伺服器地址,隱藏了真實伺服器IP地址。
在這裡插入圖片描述

2、負載均衡

單個伺服器解決不了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上的情況改為將請求分發到多個伺服器上,這就是負載均衡。
在這裡插入圖片描述

3、動靜分離

為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的伺服器來解析,加快解析速度,降低原來單個伺服器的壓力。
在這裡插入圖片描述

六、Nginx的常用命令

1、啟動

啟動程式碼格式:nginx安裝目錄地址 -c nginx組態檔地址

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2、從容停止

(1)檢視程序號

ps -ef|grep nginx
(2)殺死程序

kill -QUIT 2072

3、快速停止

(1)檢視程序號

ps -ef|grep nginx
(2)殺死程序

kill -TERM 2132

4、強制停止

pkill -9 nginx

5、重新啟動

(1)驗證nginx組態檔是否正確

方法一:進入nginx安裝目錄sbin下,輸入命令./nginx -t

看到如下顯示nginx.conf syntax is ok

nginx.conf test is successful

方法二:在啟動命令-c前加-t

/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

6、重新啟動Nginx服務

方法一:進入nginx可執行目錄sbin下,輸入命令./nginx -s reload 即可

方法二:查詢當前nginx程序號,然後輸入命令:kill -HUP 程序號 實現重新啟動nginx服務

七、Nginx組態檔

1、找到組態檔位置:

cd /usr/local/nginx/conf/nginx.conf

2、組態檔中內容

  1. 全域性塊:設定伺服器整體執行的設定指令 比如 worker_processes 1;處理並行數的設定;
  2. events 塊:影響 Nginx 伺服器與使用者的網路連線 比如 worker_connections 1024; 支援的最大連線數為 1024;
  3. http 塊 還包含兩部分: http 全域性塊 server 塊;

八、Nginx 設定範例-反向代理範例

1、實現效果

開啟瀏覽器,在瀏覽器位址列輸入地址 www.123.com,跳轉到 liunx 系統 tomcat 主頁面中

2、準備工作

  1. 在 liunx 系統安裝 tomcat,使用預設埠 8080 * tomcat 安裝檔案放到 liunx 系統中,解壓 * 進入 tomcat 的 bin 目錄中,./startup.sh 啟動 tomcat 伺服器
  2. 對外開放存取的埠 firewall-cmd --add-port=8080/tcp --permanent firewall-cmd –reload 檢視已經開放的埠號 firewall-cmd --list-all
  3. 在 windows 系統中通過瀏覽器存取 tomcat 伺服器

3、存取過程的分析

在這裡插入圖片描述

4、具體設定 第一步 在 windows 系統的 host 檔案進行域名和 ip 對應關係的設定

(1)新增內容在 host 檔案中

192.168.17.129 www.123.com

第二步 在 nginx 進行請求轉發的設定(反向代理設定)

server{
	listen:80;
	server_name 192.168.100.1;
	location / {
		root html;
		proxy pass http://127.0.0.1:8080;
		index index.html index.htm;
	}
}

5、最終測試

在這裡插入圖片描述

九、Nginx 的原理

1、mater 和 worker

在這裡插入圖片描述

2、worker 如何進行工作的

在這裡插入圖片描述

3、一個 master 和多個 woker 有好處

  1. 可以使用 nginx –s reload 熱部署,利用 nginx 進行熱部署操作;
  2. 每個 woker 是獨立的程序,如果有其中的一個 woker 出現問題,其他 woker 獨立的, 繼續進行爭搶,實現請求過程,不會造成服務中斷

4、設定多少個 woker 合適

worker 數和伺服器的 cpu 數相等是最為適宜的。

5、連線數 worker_connection

第一個:傳送請求,佔用了 woker 的幾個連線數? 答案:2 或者 4 個;

第二個:nginx 有一個 master,有四個 woker,每個 woker 支援最大的連線數 1024,支援的 最大並行數是多少?

普通的靜態存取最大並行數是: worker_connections * worker_processes /2;

而如果是 HTTP 作 為反向代理來說,

最大並行數量應該是 worker_connections * worker_processes/4;