[轉]nginx學習,看這一篇就夠了:下載、安裝。使用:正向代理、反向代理、負載均衡。常用命令和配置文件

?

?

文章目錄

  • 前言
  • 一、nginx簡介
    • 1. 什么是 nginx 和可以做什么事情
    • 2.Nginx 作為 web 服務器
    • 3. 正向代理
    • 4. 反向代理
    • 5. 負載均衡
    • 6.動靜分離
  • 二、Nginx 的安裝(Linux:centos為例)
    • 1. 準備工作
    • 2. 開始安裝
    • 3. 運行nginx
    • 4. 防火墻問題
  • 三、 Nginx 的常用命令和配置文件
    • 1. Nginx常用命令
      • a. 使用nginx操作命令前提
      • b. 查看 nginx 的版本號
      • c. 啟動 nginx
      • d. 關閉nginx
      • e. 重新加載 nginx
    • 2. Nginx配置文件
      • a. 配置文件位置
      • b. nginx 的組成部分
        • 第一部分:全局塊
        • 第二部分:events塊
        • 第三部分:
  • 四、 Nginx 反向代理 配置實例 1.1
    • 1. 實現效果
    • 2. 準備工作
    • 3. 訪問過程的分析
    • 4、具體配置
      • a. 第一步 在 windows 系統的 host 文件進行域名和 ip 對應關系的配置
      • 2. 第二步 在 nginx 進行請求轉發的配置(反向代理配置)
    • 5、最終測試
  • 五、 Nginx 反向代理 配置實例 1.2
    • 1. 實現效果
    • 2. 準備工作
      • a. 第一步,兩個tomcat端口和測試頁面
      • b. 第二步,修改 nginx 的配置文件
  • 六、 Nginx 負載均衡 配置實例 2
    • 1. 實現效果
    • 2. 準備工作
      • a.準備兩臺 tomcat 服務器
      • b. 修改一處
      • c. 測試頁面
    • 3. 在 nginx 的配置文件中進行負載均衡的配置
    • 4. 最終測試
    • 4. nginx 分配服務器策略
      • a. 輪詢(默認)
      • b. weight
      • c. ip_hash
      • d. fair(第三方)
  • 六、 Nginx 動靜分離 配置實例 3
    • 1. 什么是動靜分離
    • 2. 準備工作
    • 3. 具體配置
      • a. 在 nginx 配置文件中進行配置
    • 4. 最終測試
      • a. 測試 image
      • b. 測試 www
  • 七、 Nginx 的高可用集群
    • 1. 什么是nginx 高可用
    • 2. 配置高可用的準備工作
    • 2. 在兩臺服務器安裝keepalived
      • a)安裝:
      • b) 配置文件
    • 完成高可用配置(主從配置)
      • a) 修改 keepalived.conf 配置文件
      • b) 添加檢測腳本
      • c) 開啟nginx 和 keepalived
    • 4. 最終測試
      • a)在瀏覽器地址欄輸入 虛擬 ip 地址 192.168.17.50
      • b)把主服務器(192.168.17.129)nginx 和 keepalived 停止,再輸入 192.168.17.50
  • 八、 Nginx 的原理
    • 1. mater 和 worker
    • 2. master-workers 的機制的好處
    • 3. 設置多少個 worker
    • 4. 連接數 worker_connection

?

?

前言

?

一、nginx簡介

?

1. 什么是 nginx 和可以做什么事情

?

  • Nginx 是高性能的 HTTP 和反向代理的web服務器,處理高并發能力是十分強大的,能經受高負 載的考驗,有報告表明能支持高達 50,000 個并發連接數。

  • 其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

?

2.Nginx 作為 web 服務器

?

  • Nginx 可以作為靜態頁面的 web 服務器,同時還支持 CGI 協議的動態語言,比如 perl、php 等。但是不支持 java。Java 程序只能通過與 tomcat 配合完成。Nginx 專為性能優化而開發, 性能是其最重要的考量,實現上非常注重效率 ,能經受高負載的考驗,有報告表明能支持高 達 50,000 個并發連接數。
    https://lnmp.org/nginx.html

?

3. 正向代理

?

Nginx 不僅可以做反向代理,實現負載均衡。還能用作正向代理來進行上網等功能。 正向代理:如果把局域網外的 Internet 想象成一個巨大的資源庫,則局域網中的客戶端要訪 問 Internet,則需要通過代理服務器來訪問,這種代理服務就稱為正向代理。

?

  • 簡單一點:通過代理服務器來訪問服務器的過程 就叫 正向代理。
  • 需要在客戶端配置代理服務器進行指定網站訪問
    在這里插入圖片描述

?

4. 反向代理

?

  • 反向代理,其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問
  • 我們只 需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據后,在返 回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器 地址,隱藏了真實服務器 IP 地址。
    在這里插入圖片描述

?

5. 負載均衡

?

  • 增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的 情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們所說的負 載均衡

  • 客戶端發送多個請求到服務器,服務器處理請求,有一些可能要與數據庫進行交互,服 務器處理完畢后,再將結果返回給客戶端。

?

???????這種架構模式對于早期的系統相對單一,并發請求相對較少的情況下是比較適合的,成 本也低。但是隨著信息數量的不斷增長,訪問量和數據量的飛速增長,以及系統業務的復雜 度增加,這種架構會造成服務器相應客戶端的請求日益緩慢,并發量特別大的時候,還容易 造成服務器直接崩潰。很明顯這是由于服務器性能的瓶頸造成的問題,那么如何解決這種情 況呢?

?

???????我們首先想到的可能是升級服務器的配置,比如提高 CPU 執行頻率,加大內存等提高機 器的物理性能來解決此問題,但是我們知道摩爾定律的日益失效,硬件的性能提升已經不能 滿足日益提升的需求了。最明顯的一個例子,天貓雙十一當天,某個熱銷商品的瞬時訪問量 是極其龐大的,那么類似上面的系統架構,將機器都增加到現有的頂級物理配置,都是不能 夠滿足需求的。那么怎么辦呢?上面的分析我們去掉了增加服務器物理配置來解決問題的辦法,也就是說縱向解決問題 的辦法行不通了,那么橫向增加服務器的數量呢?這時候集群的概念產生了,單個服務器解 決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們 所說的負載均衡
在這里插入圖片描述
在這里插入圖片描述

?

6.動靜分離

?

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

?

二、Nginx 的安裝(Linux:centos為例)

?

nginx安裝時,用到的包,我都準備好啦,方便使用:
https://download.csdn.net/download/qq_40036754/11891855
本來想放百度云的,但是麻煩,所以我就直接上傳到我的資源啦,大家也可以直接聯系我,我直接給大家的。

?

1. 準備工作

?

  • 打開虛擬機,使用finallshell鏈接Linux操作系統
  • 到nginx下載軟件
    http://nginx.org/
    在這里插入圖片描述
  • 先安裝其依賴軟件,最后安裝nginx。
  • 依賴工具:pcre-8.3.7.tar.gz, openssl-1.0.1t.tar.gz, zlib-1.2.8.tar.gz, nginx-1.11.1.tar.gz。 我這里也提供下。

?

2. 開始安裝

?

  • 都有兩種方式,一種直接下載,第二種使用解壓包方式。這里大多使用解壓包方式。
  • 我的安裝路徑:/usr/feng/

?

  1. 安裝pcre
    方式一、wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz 。
    方拾二、上傳源碼壓縮包,解壓、編譯、安裝 三部曲。
    1)、解壓文件, 進入pcre目錄,
    2)、./configure 完成后,
    3)、執行命令: make && make install
  2. 安裝 openssl
    下載OpenSSL的地址:
    http://distfiles.macports.org/openssl/
    1)、解壓文件, 回到 pcre 目錄下,
    2)、./configure 完成后,
    3)、執行命令: make && make install
  3. 安裝zlib
    1)、解壓文件, 回到 pcre 目錄下,
    2)、./configure 完成后,
    3)、執行命令: make && make install
  4. 安裝nginx
    1)、解壓文件, 回到 pcre 目錄下,
    2)、./configure 完成后,
    3)、執行命令: make && make install

?

3. 運行nginx

?

  • 安裝完nginx后,會在 路徑 /usr/local 下nginx 的文件夾。這是自動生成的。
  • 進入這個目錄:

?

cd /usr/local/nginx

?

目錄內容如下:
在這里插入圖片描述

?

  • 進入sbin文件夾,里面有兩個文件:nginx 和 nginx.old。
  • 執行命令:./nginx 即可執行
  • 測試啟動: ps -ef | grep nginx
    在這里插入圖片描述
    已經啟動。
  • 查看nginx默認端口(默認為80),使用網頁的形式測試,(像Tomcat一樣。)
  • 進入目錄查看端口:cd /usr/local/nginx/conf 下的 nginx.conf文件。這個文件也是nginx的配置文件。vim 下:
    如下在這里插入圖片描述
  • 輸入IP:80,則顯示:
    在這里插入圖片描述

?

4. 防火墻問題

?

在 windows 系統中訪問 linux 中 nginx,默認不能訪問的,因為防火墻問題 (1)關閉防火墻 (2)開放訪問的端口號,80 端口

?

查看開放的端口號

?

firewall-cmd --list-all 

?

設置開放的端口號

?

firewall-cmd --add-service=http –permanent 
firewall-cmd --add-port=80/tcp --permanent 

?

重啟防火墻

?

firewall-cmd –reload 

?

三、 Nginx 的常用命令和配置文件

?

1. Nginx常用命令

?

a. 使用nginx操作命令前提

?

使用nginx操作命令前提:必須進入到nginx的自動生成目錄的下/sbin文件夾下
nginx有兩個目錄:
第一個:安裝目錄,我放在:

?

/usr/feng/

?

第二個:自動生成目錄:

?

/usr/local/nginx/

?

b. 查看 nginx 的版本號

?

./nginx -v

?

在這里插入圖片描述

?

c. 啟動 nginx

?

./nginx

?

在這里插入圖片描述

?

d. 關閉nginx

?

./nginx -s stop

?

在這里插入圖片描述

?

e. 重新加載 nginx

?

在目錄:/usr/local/nginx/sbin 下執行命令,不需要重啟服務器,自動編譯。

?

./nginx -s reload

?

2. Nginx配置文件

?

a. 配置文件位置

?

/usr/local/nginx/conf/nginx.conf
在這里插入圖片描述

?

b. nginx 的組成部分

?

配置文件中有很多#, 開頭的表示注釋內容,我們去掉所有以 # 開頭的段落,精簡之后的 內容如下:

?

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

?

  • nginx 配置文件有三部分組成

?

第一部分:全局塊

?

從配置文件開始到 events 塊之間的內容,主要會設置一些影響nginx 服務器整體運行的配置指令,主要包括配 置運行 Nginx 服務器的用戶(組)、允許生成的 worker process 數,進程 PID 存放路徑、日志存放路徑和類型以 及配置文件的引入等。
比如上面第一行配置的:

?

  worker_processes  1;

?

這是 Nginx 服務器并發處理服務的關鍵配置,worker_processes 值越大,可以支持的并發處理量也越多,但是 會受到硬件、軟件等設備的制約。

?

第二部分:events塊

?

比如上面的配置:

?

events {worker_connections  1024;
}

?

events 塊涉及的指令**主要影響 Nginx 服務器與用戶的網絡連接,常用的設置包括是否開啟對多 work process 下的網絡連接進行序列化,是否 允許同時接收多個網絡連接,選取哪種事件驅動模型來處理連接請求,每個 word process 可以同時支持的最大連接數等。**
上述例子就表示每個 work process 支持的最大連接數為 1024.
這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置。

?

第三部分:

?

http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

?

這算是 Nginx 服務器配置中最頻繁的部分,代理、緩存和日志定義等絕大多數功能和第三方模塊的配置都在這里。

?

需要注意的是:http 塊也可以包括 http全局塊、server 塊。

?

  • http全局塊
    http全局塊配置的指令包括文件引入、MIME-TYPE 定義、日志自定義、連接超時時間、單鏈接請求數上限等。
  • server 塊
    這塊和虛擬主機有密切關系,虛擬主機從用戶角度看,和一臺獨立的硬件主機是完全一樣的,該技術的產生是為了 節省互聯網服務器硬件成本。
    每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當于一個虛擬主機。
    而每個 server 塊也分為全局 server 塊,以及可以同時包含多個 locaton 塊。

?

  1. 全局 server 塊
    最常見的配置是本虛擬機主機的監聽配置和本虛擬主機的名稱或IP配置。
  2. location 塊
    一個 server 塊可以配置多個 location 塊。
    這塊的主要作用是基于 Nginx 服務器接收到的請求字符串(例如 server_name/uri-string),對虛擬主機名稱 (也可以是IP 別名)之外的字符串(例如 前面的 /uri-string)進行匹配,對特定的請求進行處理。 地址定向、數據緩 存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。

?

四、 Nginx 反向代理 配置實例 1.1

?

1. 實現效果

?

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

?

2. 準備工作

?

(1)在 liunx 系統安裝 tomcat,使用默認端口 8080,我這里8080被其他應用占用,所以我已修改端口為8081。在conf目錄下的server.xml配置文件中,如下,將port改為 8081,其實下面也有類似的Connector 標簽,但是要看protocol協議為HTTP/1.1的標簽修改即可。

?

<Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />

?

  • tomcat 安裝文件放到 liunx 系統中,解壓。
    Tomcat的路徑:/usr/feng/apach-tomcat/tomcat8081下
  • 進入 tomcat 的 bin 目錄中,./startup.sh 啟動 tomcat 服務器。

?

(2)對外開放訪問的端口 (我這里不需要)

?

  • firewall-cmd --add-port=8080/tcp --permanent
  • firewall-cmd –reload
  • 查看已經開放的端口號 firewall-cmd --list-all

?

(3)在 windows 系統中通過瀏覽器訪問 tomcat 服務器
別忘了開啟tomcat,在bin目錄下,使用 命令:

?

./startup.sh

?

在這里插入圖片描述

?

3. 訪問過程的分析

?

在這里插入圖片描述

?

4、具體配置

?

a. 第一步 在 windows 系統的 host 文件進行域名和 ip 對應關系的配置

?

在這里插入圖片描述
添加內容在 host 文件中
在這里插入圖片描述

?

2. 第二步 在 nginx 進行請求轉發的配置(反向代理配置)

?

在這里插入圖片描述

?

5、最終測試

?

如上配置,我們監聽 80 端口,訪問域名為 www.123.com,不加端口號時默認為 80 端口,故 訪問該域名時會跳轉到 127.0.0.1:8081 路徑上。在瀏覽器端輸入 www.123.com 結果如下:

?

在這里插入圖片描述

?

五、 Nginx 反向代理 配置實例 1.2

?

1. 實現效果

?

實現效果:使用 nginx 反向代理,根據訪問的路徑跳轉到不同端口的服務中
nginx 監聽端口為 9001,
訪問 http://127.0.0.1:9001/edu/ 直接跳轉到 127.0.0.1:8081
訪問 http://127.0.0.1:9001/vod/ 直接跳轉到 127.0.0.1:8082

?

2. 準備工作

?

a. 第一步,兩個tomcat端口和測試頁面

?

  • 準備兩個 tomcat,一個 8081 端口,一個 8082 端口。
    在**/usr/feng/apach-tomcat/下 新建tomcat8081和tomcat8082兩個文件夾,將 Tomcat安裝包 分別上傳到兩個文件夾,進行解壓縮安裝,8081的Tomcat只改一個http協議默認端口號** 就行,直接啟動即可。
    這里需要改8082的端口號,需要修改三個端口,只修改一個端口號的話,是啟動不了的,我已經測試過了(如果只修改http協議默認端口的話,8081和8082只會啟動一個)。因為默認的都是8080(沒有的直接創建文件夾,好多都是剛建的,與上面的第一個示例示例有點改動

?

  1. tomcat8081 解壓包,然后進入到 /bin 下 ,使用命令 ./startup 啟動

  2. tomcat8082
    使用命令 編輯 文件 :/conf/server.xml 文件
    vim server.xml
    修改后如下:
    1、修改server 的默認端口,由默認8005->8091在這里插入圖片描述
    2、修改http協議的默認端口,由默認的8080->8082
    在這里插入圖片描述
    3、修改默認ajp協議的默認端口,由默認的8009->9001
    在這里插入圖片描述

?

  • 并準備好測試的頁面
    寫一個a.html頁面,
    tomcat8081的tomcat,放到目錄 /webapp/vod 下,內容:

?

<h1>fengfanchen-nginx-8081!!!</h1>

?

tomcat8082的tomcat,放到目錄 /webapp/edu 下,內容:

?

<h1>fengfanchen-nginx-8082!!!</h1>

?

  • 測試頁面
    在這里插入圖片描述
    在這里插入圖片描述

?

b. 第二步,修改 nginx 的配置文件

?

修改 nginx 的配置文件 在 http 塊中添加 server{}
修改其中注釋的就行。
在這里插入圖片描述
修改成功后
在這里插入圖片描述

?

  • 開發的端口: nginx監聽端口:8001,tomcat8081端口:8081,tomcat8082端口:8082。
  • 測試結果
    在這里插入圖片描述
    在這里插入圖片描述
  • location 指令說明

?

該指令用于匹配 URL。
語法如下:

?

1、= :用于不含正則表達式的 uri 前,要求請求字符串與 uri 嚴格匹配,如果匹配 成功,就停止繼續向下搜索并立即處理該請求。
2、~:用于表示 uri 包含正則表達式,并且區分大小寫。
3、~*:用于表示 uri 包含正則表達式,并且不區分大小寫。
4、^~:用于不含正則表達式的 uri 前,要求 Nginx 服務器找到標識 uri 和請求字 符串匹配度最高的 location 后,立即使用此 location 處理請求,而不再使用 location 塊中的正則 uri 和請求字符串做匹配。

?

注意:如果 uri 包含正則表達式,則必須要有 ~ 或者 ~*標識。

?

六、 Nginx 負載均衡 配置實例 2

?

1. 實現效果

?

瀏覽器地址欄輸入地址 http://208.208.128.122/edu/a.html,負載均衡效果,平均 8081 和 8082 端口中

?

2. 準備工作

?

a.準備兩臺 tomcat 服務器

?

  • 準備兩臺 tomcat 服務器,一臺 8081,一臺 8082
  • 上面的反向代理第二個實例中已經配置成功了。但是需要添加點東西,如下哦。

?

b. 修改一處

?

  • 在兩臺 tomcat 里面 webapps 目錄中,創建名稱是 edu 文件夾,在 edu 文件夾中創建 頁面 a.html,用于測試。
  • 由于第二個實例中,8082中有了 edu 的文件夾,所以只在8081 文件夾下創建即可。
    然后使用在vod文件下使用命令:

?

cp a.html ../edu/

?

即可完成,
查看命令

?

cd ../edu/  # 進入到 edu 目錄下
cat a.html  #查看內容

?

c. 測試頁面

?

測試URL

?

http://208.208.128.122:8081/edu/a.html

?

在這里插入圖片描述

?

http://208.208.128.122:8082/edu/a.html

?

在這里插入圖片描述

?

3. 在 nginx 的配置文件中進行負載均衡的配置

?

修改了第一個示例的 配置
在這里插入圖片描述

?

    upstream myserver {server 208.208.128.122:8081;server 208.208.128.122:8082;}server {listen       80;server_name  208.208.128.122;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;proxy_pass   http://myserver;#proxy_pass   http://127.0.0.1:8081;index  index.html index.htm;}

?

4. 最終測試

?

測試url

?

http://208.208.128.122/edu/a.html

?

在這里插入圖片描述
在這里插入圖片描述

?

4. nginx 分配服務器策略

?

隨著互聯網信息的爆炸性增長,負載均衡(load balance)已經不再是一個很陌生的話題, 顧名思義,負載均衡即是將負載分攤到不同的服務單元,既保證服務的可用性,又保證響應 足夠快,給用戶很好的體驗。快速增長的訪問量和數據流量催生了各式各樣的負載均衡產品, 很多專業的負載均衡硬件提供了很好的功能,但卻價格不菲,這使得負載均衡軟件大受歡迎, nginx 就是其中的一個,在 linux 下有 Nginx、LVS、Haproxy 等等服務可以提供負載均衡服 務,而且 Nginx 提供了幾種分配方式(策略):

?

a. 輪詢(默認)

?

每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器 down 掉,能自動剔除。
配置方式:

?

b. weight

?

weight 代表權重, 默認為 1,權重越高被分配的客戶端越多

?

    upstream myserver {server 208.208.128.122:8081 weight=10;   #  在這兒server 208.208.128.122:8082 weight=10;}server {listen       80;server_name  208.208.128.122;location / {root   html;proxy_pass   http://myserver;index  index.html index.htm;}

?

c. ip_hash

?

ip_hash 每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個后端服務器

?

    upstream myserver {ip_hash;							//  在這兒server 208.208.128.122:8081 ;   server 208.208.128.122:8082 ;}server {listen       80;server_name  208.208.128.122;location / {root   html;proxy_pass   http://myserver;index  index.html index.htm;}

?

d. fair(第三方)

?

fair(第三方),按后端服務器的響應時間來分配請求,響應時間短的優先分配。

?

    upstream myserver {					server 208.208.128.122:8081 ;   server 208.208.128.122:8082 ;fair; 														#  在這兒}server {listen       80;server_name  208.208.128.122;location / {root   html;proxy_pass   http://myserver;index  index.html index.htm;}

?

六、 Nginx 動靜分離 配置實例 3

?

1. 什么是動靜分離

?

在這里插入圖片描述
Nginx 動靜分離簡單來說就是把動態跟靜態請求分開,不能理解成只是單純的把動態頁面和 靜態頁面物理分離。嚴格意義上說應該是動態請求跟靜態請求分開,可以理解成使用 Nginx 處理靜態頁面,Tomcat 處理動態頁面。動靜分離從目前實現角度來講大致分為兩種:

?

  • 一種是純粹把靜態文件獨立成單獨的域名,放在獨立的服務器上,也是目前主流推崇的方案;

  • 另外一種方法就是動態跟靜態文件混合在一起發布,通過 nginx 來分開。

?

通過 location 指定不同的后綴名實現不同的請求轉發。通過 expires 參數設置,可以使 瀏覽器緩存過期時間,減少與服務器之前的請求和流量。具體 Expires 定義:是給一個資 源設定一個過期時間,也就是說無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可, 所以不會產生額外的流量。此種方法非常適合不經常變動的資源。(如果經常更新的文件, 不建議使用 Expires 來緩存),我這里設置 3d,表示在這 3 天之內訪問這個 URL,發送 一個請求,比對服務器該文件最后更新時間沒有變化,則不會從服務器抓取,返回狀態碼 304,如果有修改,則直接從服務器重新下載,返回狀態碼 200。

?

2. 準備工作

?

  • 在Linux 系統中準備 靜態資源,用于進行訪問。
    在這里插入圖片描述

?

  1. www文件夾中 a.html

?

<h1>fengfanchen-test-html</h1>

?

  1. image 中的 01.jpg
    我的照片哈!!!(自動忽略)
    在這里插入圖片描述

?

3. 具體配置

?

a. 在 nginx 配置文件中進行配置

?

在這里插入圖片描述

?

4. 最終測試

?

a. 測試 image

?

http://208.208.128.122/image/
http://208.208.128.122/image/01.jpg

?

在這里插入圖片描述
在這里插入圖片描述

?

b. 測試 www

?

http://208.208.128.122/www/a.html 

?

在這里插入圖片描述

?

七、 Nginx 的高可用集群

?

1. 什么是nginx 高可用

?

在這里插入圖片描述
配置示例流程:

?

  1. 需要兩臺nginx 服務器
  2. 需要keepalived
  3. 需要虛擬IP

?

2. 配置高可用的準備工作

?

  1. 需要兩臺服務器 208.208.128.122 和 208.208.128.85
  2. 在兩臺服務器安裝 nginx(流程最上面有)
    第二臺服務器的默認端口 改為 9001 ,運行并測試,如下:
    在這里插入圖片描述
  3. 在兩臺服務器安裝 keepalived

?

2. 在兩臺服務器安裝keepalived

?

a)安裝:

?

第一種方式:命令安裝

?

yum install keepalived -y
# 查看版本:
rpm -q -a keepalived

?

第二種方式:安裝包方式(這里我使用這個)
將壓縮包上傳至:/usr/feng/
命令如下:

?

cd /usr/feng/
tar -zxvf keepalived-2.0.18.tar.gz
cd keepalived-2.0.18
./configure
make && make install

?

b) 配置文件

?

安裝之后,在 etc 里面生成目錄 keepalived,有文件 keepalived.conf 。
這個就是主配置文件。
主從模式主要在這個文件里配置。

?

完成高可用配置(主從配置)

?

a) 修改 keepalived.conf 配置文件

?

修改/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 208.208.128.122smtp_connect_timeout 30 router_id LVS_DEVEL 
} vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2      #(檢測腳本執行的間隔) weight 2 } vrrp_instance VI_1 {     state MASTER   # 備份服務器上將 MASTER 改為 BACKUP       interface ens192  //網卡     virtual_router_id 51   # 主、備機的 virtual_router_id 必須相同     priority 100     # 主、備機取不同的優先級,主機值較大,備份機值較小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress {         208.208.128.50 // VRRP H 虛擬地址 } 
}

?

b) 添加檢測腳本

?

在/usr/local/src 添加檢測腳本

?

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi

?

c) 開啟nginx 和 keepalived

?

把兩臺服務器上 nginx 和 keepalived 啟動 :
啟動 nginx:./nginx
啟動 keepalived:systemctl start keepalived.service
在這里插入圖片描述
85服務一樣。

?

4. 最終測試

?

a)在瀏覽器地址欄輸入 虛擬 ip 地址 192.168.17.50

?

在這里插入圖片描述
在這里插入圖片描述

?

b)把主服務器(192.168.17.129)nginx 和 keepalived 停止,再輸入 192.168.17.50

?

在這里插入圖片描述
在這里插入圖片描述

?

八、 Nginx 的原理

?

1. mater 和 worker

?

  • nginx 啟動后,是由兩個進程組成的。master(管理者)和worker(工作者)。

  • 一個nginx 只有一個master。但可以有多個worker
    在這里插入圖片描述

  • ,過來的請求由master管理,worker進行爭搶式的方式去獲取請求。
    在這里插入圖片描述
    在這里插入圖片描述

?

2. master-workers 的機制的好處

?

  • 首先,對于每個 worker 進程來說,獨立的進程,不需要加鎖,所以省掉了鎖帶來的開銷, 同時在編程以及問題查找時,也會方便很多。
  • 可以使用 nginx –s reload 熱部署,利用 nginx 進行熱部署操作
  • 其次,采用獨立的進程,可以讓互相之間不會 影響,一個進程退出后,其它進程還在工作,服務不會中斷,master 進程則很快啟動新的 worker 進程。當然,worker 進程的異常退出,肯定是程序有 bug 了,異常退出,會導致當 前 worker 上的所有請求失敗,不過不會影響到所有請求,所以降低了風險。

?

3. 設置多少個 worker

?

Nginx 同 redis 類似都采用了 io 多路復用機制,每個 worker 都是一個獨立的進程,但每個進 程里只有一個主線程,通過異步非阻塞的方式來處理請求, 即使是千上萬個請求也不在話 下。每個 worker 的線程可以把一個 cpu 的性能發揮到極致。所以 worker 數和服務器的 cpu 數相等是最為適宜的。設少了會浪費 cpu,設多了會造成 cpu 頻繁切換上下文帶來的損耗。

?

  • worker 數和服務器的 cpu 數相等是最為適宜

?

4. 連接數 worker_connection

?

第一個:發送請求,占用了 woker 的幾個連接數?

?

  • 答案:2 或者 4 個

?

第二個:nginx 有一個 master,有四個 woker,每個 woker 支持最大的連接數 1024,支持的 最大并發數是多少?

?

  • 普通的靜態訪問最大并發數是: worker_connections * worker_processes /2,
  • 而如果是 HTTP 作 為反向代理來說,最大并發數量應該是 worker_connections * worker_processes/4。

?

這個值是表示每個 worker 進程所能建立連接的最大值,所以,一個 nginx 能建立的最大連接 數,應該是 worker_connections * worker_processes。當然,這里說的是最大連接數,對于 HTTP 請 求 本 地 資 源 來 說 , 能 夠 支 持 的 最 大 并 發 數 量 是 worker_connections * worker_processes,如果是支持 http1.1 的瀏覽器每次訪問要占兩個連接,所以普通的靜態訪 問最大并發數是: worker_connections * worker_processes /2,而如果是 HTTP 作 為反向代 理來說,最大并發數量應該是 worker_connections * worker_processes/4。因為作為反向代理服務器,每個并發會建立與客戶端的連接和與后端服 務的連接,會占用兩個連接。

?

在這里插入圖片描述

不想在線看,可以下載MD文件:https://download.csdn.net/download/admans/12004781

文件為MD(MarkDown)文件,推薦兩個開源的MD工具:https://github.com/ivarptr/yu-writer.site,https://github.com/tamlok/vnote?


---------------------
作者:馮insist
來源:CSDN
原文:https://blog.csdn.net/qq_40036754/article/details/102463099
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/285246.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285246.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285246.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在 .NET 6 中使用 Startup.cs 更簡潔的方法

如果您在關注 .NET 6&#xff0c;那么您應該知道&#xff0c;在 .NET 6 項目中&#xff0c;沒有 Startup.cs 文件&#xff0c;現在使用了 Program.cs 文件來完成統一的配置。我之前發了一篇使用在 .NET 6 項目中使用 Startup.cs 的文章。在 .NET 6 項目中使用 Startup.cs能否能…

【ArcGIS Pro微課1000例】0005:ArcGIS Pro 2.5基于矢量數據制作拉伸三維地圖案例

ArcGIS Pro 2.5中,可以基于某個字段,對矢量數據進行拉伸,制作精美的三維地圖。本文以中國省級行政區劃數據為例,基于面積字段制作3d地圖。 文章目錄 1. 新建局部場景2. 地圖符號化3. 三維矢量地圖制作1. 新建局部場景 打開ArcGIS Pro 2.5,新建局部場景項目,并保存。 2. …

C語言試題144之編寫函數輸入,輸出 5 個學生的數據記錄。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:編寫 input()和 output()函數…

第十一次實驗總結

知識點總結&#xff1a; 指針、數組和地址間的關系 數組的基地址是在內存中存儲數組的起始位置&#xff0c;它是數組中第一個元素&#xff08;下標為0&#xff09;的地址&#xff0c;因此數組名本身是一個地址即指針值。 指針是以地址作為值的變量&#xff0c;而數組名的值是一…

Python統計列表中的重復項出現的次數的方法

本文實例展示了Python統計列表中的重復項出現的次數的方法&#xff0c;是一個很實用的功能&#xff0c;適合Python初學者學習借鑒。具體方法如下&#xff1a; 對一個列表&#xff0c;比如[1,2,2,2,2,3,3,3,4,4,4,4]&#xff0c;現在我們需要統計這個列表里的重復項&#xff0c;…

分布式(一致性協議)之領導人選舉( DotNext.Net.Cluster 實現Raft 選舉 )

分布式(一致性協議)之領導人選舉( DotNext.Net.Cluster 實現Raft 選舉 )繼分布式鎖之后的又一高可用技術爽文之分布式領導選舉 或者說 分布式一致性協議的實現分布式選舉是實現高可用的必備技術&#xff0c;想實現主從&#xff0c;就必須得有選舉的策略&#xff0c;有主從才會有…

投巧解決JavaScript split方法出現空字符的問題

直接使用split&#xff0c;前后各有一個“”值。 >> var str,a,b,c,d,e,f,; >> str.split(,);//(8) ["", "a", "b", "c", "d", "e", "f", ""]臨時方法&#xff1a;split后&…

C語言試題146之反向輸出一個鏈表

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:反向輸出一個鏈表 2 、溫馨提…

【ArcGIS Pro微課1000例】0006:ArcGIS Pro 2.5三維顯示DEM數字高程模型

通過ArcGIS的學習,我們知道,ArcScene可以實現二維數據的三維顯示,是將二維數據(例如DEM)進行自定義表面浮動拉伸。那么ArcGIS Pro中能不能實現DEM的三維顯示呢? ArcScene三維顯示結果: 目前所采用的ArcGIS Pro 2.5版本還不能直接將DEM進行三維顯示,我們的做法是參照Ar…

中國古代歷朝首都一覽

【五帝時期】&#xff08;約公元前26世紀初—公元前2070年&#xff09; 『黃帝』有熊&#xff08;今河南鄭州新鄭&#xff09; 『顓頊』帝丘&#xff08;今河南濮陽&#xff09; 『帝嚳』帝丘&#xff08;今河南濮陽&#xff09;、西亳&#xff08;今河南洛陽偃師西&#xff09…

程序員的自我修養:有助于提高溝通能力的7本書

直接影響工作效率的四種能力&#xff1a;溝通能力、自學能力、自我管理能力、問題解決能力。提高溝通能力&#xff0c;是程序員提高自我修養的必要條件。相信很多人跟我一樣&#xff0c;性格內向&#xff0c;信仰技術&#xff0c;很少有跟人說話的愿望&#xff0c;只是想看代碼…

玩轉 Linux 之:磁盤分區、掛載知多少?

轉載于&#xff1a;http://my.oschina.net/leejun2005/blog/290073 在做日志機擴容的時候&#xff0c;發現運維同學將一塊硬盤的掛載點沒有同以前的日志機保持一致&#xff0c;考慮到這會給日后的維護帶來麻煩&#xff0c;于是嘗試著手修改&#xff0c;在修改的同時&#xff0c…

C# NanoFramework 點燈和按鍵 之 ESP32

本來周末是要搞個大的&#xff0c;WIFI 和 Web網頁之類的&#xff0c;奈何搞了兩天&#xff0c;并與外國友人聊過后&#xff0c;才發現是固件有問題&#xff0c;晚上與大佬進行交流后才發現&#xff0c;原來ESP32S的官方固件有問題&#xff0c;搞不了。所以&#xff0c;建議買的…

【ArcGIS Pro微課1000例】0002:ArcGIS Pro 2.5二三維聯動顯示

ArcGIS Pro是一款全新的桌面應用程序,它改變了桌面GIS的工作方式,以滿足新一代WebGIS應用模式。ArcGIS Pro采用Ribbon界面風格,給人全新的用戶體驗。它作為一個高級的應用程序,可以對來自本地、ArcGIS Online、或者Portal for ArcGIS的數據進行可視化、編輯、分析。同時,實…

Spring Boot 解決跨域Cors問題

后端主要代碼&#xff1a; &#xff08;http://localhost:8080/ &#xff09; /*WebCorsConfig.java*/ package com.example.demo.Controller;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsR…

C語言試題147之創建一個鏈表并且排序輸出這個鏈表

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:創建一個鏈表并且排序輸出這…

DOM節點創建(jQuery)

1DOM創建節點及節點屬性 通過JavaScript可以很方便的獲取DOM節點&#xff0c;從而進行一系列的DOM操作。但實際上一般開發者都習慣性的先定義好HTML結構&#xff0c;但這樣就非常不靈活了。 試想下這樣的情況&#xff1a;如果我們通過AJAX獲取到數據之后然后才能確定結構的話&a…

PHP中刷新輸出緩沖

2019獨角獸企業重金招聘Python工程師標準>>> http://www.cnblogs.com/mutuan/archive/2012/03/18/2404957.html 轉載于:https://my.oschina.net/wuzhencan/blog/652259

2021最新計算機二級C語言試題

一、選擇題 (1) 下面敘述正確的是( C ) A. 算法的執行效率與數據的存儲結構無關 B. 算法的空間復雜度是指算法程序中指令(或語句)的條數 C. 算法的有窮性是指算法必須能在執行有限個步驟之后終止 D. 以上三種描述都不對 (2) 以下數據結構中不屬于線性數據結構的是( C ) A…

[webpack3.8.1]Guides-4-Output Management(輸出管理)

Output Management This guide extends on code examples found in the Asset Management guide.這個指南將在上一個指南的基礎上對示例代碼進行擴展。 So far weve manually included all our assets in our index.html file, but as your application grows and once you sta…