Nginx 應用 和 知識點

負責均衡裏面常用的策略有:

  1. 輪詢:不做任何的配置默認採用輪詢的策略。就 1212121 這樣 輪着來。

2.

後面什麼都不寫 只寫一個端口號和ip地址 這樣的就是採用的輪詢的策略。

 

權重策略: 有的 服務器 性能高有的服務器性能低,這樣子就可以按照權重比來讓 服務器的壓力平坦一下。 一般用在 服務器的性能不平均的情況。

 

Ip_hash策略: 這種的策略可以有效地防止session的丟失 。

將 ip地址 先做一下 hash運算,然後 %2取模,模爲1的分到服務器1,模爲2,分到服務器2中,只要是我們的ip地址不變化,那麼我們的 這臺機器每次訪問時 nginx分配的服務器也是不變的。

Hash( ip地址 ) % 2 = 分的服務器的號碼。

原理:IP地址不變,訪問的 服務器 就不變。

爲什麼會產生session丟失的現象?

我們本來被分配到了 tomcat-1服務器上,第二次登錄又被分配到了tocmat-2服務器上,但是tomcat-2上面沒有我們登錄之後生成的session。

 

Backup:中文意思是 : 備用的意思。

其他的 所有的 非備用機器 都 down掉了之後,太請求備用的機器。

也就是 當別的 備用機器 都down掉了,然後開啓 備用的 虛擬主機。

*****Server的意思就是 虛擬主機的意思。

 

 

**************Backup 和 down 關鍵字 :

我們用down這個關鍵字來標註這個 虛擬主機 是down機狀態,我們的 nginx就不會向我們的 這個 標記爲 down機的虛擬主機 分配請求了,就算我們的 這個 虛擬主機是 可以正常工作的,但是我們人爲 將這個 虛擬主機設置和標註爲 down狀態,我們的nginx也不會向我們的這個虛擬主機分配一個請求 。

 

假如這個機器上面的機器 也 down 機了,這樣子 ngnx找不到可以使用的虛擬主機了,這樣子就會 報錯,提示服務不可用。

 

*********************我們什麼時候使用 down 這樣中關鍵字呢 ?

一般我們的項目上線的時候會使用到down。

假如我們的公司有 5臺服務器,這時候 我們就選擇一個 訪問壓力小的時間來進行上線操作。這時候我們就 修改我們的 nginx.conf配置文件,然後將我們這三臺服務器修改爲down狀態,這樣我們的 前臺用戶的請求就 沒有辦法分發到我們這三臺服務器上了,這時候我們對這三臺服務器進行上線活動,等三臺都上線成功了,我們再將這三臺服務器開啓,然後將另外的兩臺服務器down掉,然後讓 那三臺服務器來接受我們的 前臺用的請求,這兩臺服務器,down之後就開始上線活動,等上線完成,然後修改配置文件,然後讓這5臺服務器 同時接受和處理我們的前臺用的 請求 。

 

******靜態代理 :

 

我們一般將我們的 靜態資源交給我們的 nginx來處理,因爲我們的nginx更擅長處理我們的靜態資源。 使用nginx處理靜態資源 效率更高 速度更快 。

而且需要注意的是: 我們的 nginx 不擅長處理 jsp,而且也不支持jsp的處理,因爲jsp上有動態資源也有靜態資源,可以將jsp上面的靜態資源叫給nginx來處理。 像 js ,html,css,images等靜態資源可以都可以使用nginx來處理。

 

***靜態資源 全部  都在 nginx下面進行部署。我們的tomcat下只部署jsp和動態的web程序。

用戶真正看到一個頁面,這個頁面是有兩個操作拼裝而成的。

第一部分: 我們的頁面上所有的靜態資源是我們nginx來進行處理提供的。

第二部分:我們的頁面上所有的動態資源或者說是從數據庫中獲取到的資源都是我們的tomcat進行處理和提供的。

第一部分 + 第二部分 == 用戶看到的頁面

 

我們訪問靜態資源 到時候 訪問不走tomcat,而是去 nginx 的某個目錄下去尋找 我們需要的靜態資源。

 

第一個點. 表示任意字符。

第一個 * 表示一個或多個字符。

這兩個加在一起 表示的意思是: 一個或多個任意字符。

~ 波浪線表示的是 正則比較。

$ 表示正則表達式的結尾 。

 

上面的的配置就是 匹配靜態資源的後綴,然後根據靜態資源的後綴,然後去nginx下的/opt/static 目錄下 進行對比查找。

 

我們瀏覽器訪問我們的存放在nginx中的靜態資源要怎麼進行訪問呢?

Ip地址 + port端口號 = root

Http://192.168.242.128/myweb/images/xxx.jpg

這個請求的意思是:去ip地址下面的80端口中的myweb項目下的images包中獲取xxx.jsp

我們在idea中開發的時候,我們的靜態資源和動態資源都是由我們的tomcat來進行處理的,但是上線的時候我們的 靜態資源是交給我們的 nginx進行處理,我們的動態資源是交給我們的 tomcat來處理的,這時候就出現一個問題了,我們從項目中寫好的 靜態資源的訪問路徑,如果將靜態資源轉移到我們的 nginx中之後我們之前在idea中寫的 靜態資源訪問路徑就不能訪問了麼? 所以我們爲了解決這種情況的發生,我們才引用了 ip地址+port端口= root 。 然後 我們在 從我們的 nginx下面創建我們缺少的包,然後組成我們 需要的 之前在idea中寫的 靜態資源訪問路徑。

 

我們的 nginx在匹配我們的 路徑請求還有目錄名的時候,image 和 images是可以匹配成功的,我們請求中由image,但是包名爲images,這樣nginx也可以匹配成功的。

 

我們使用 nginx 實現 動靜分離:負載均衡 和 靜態代理 進行結合 就是 動靜分離。

我們的  使用 負載均衡 進行 對 tomcat的跳轉 和 請求的分發,我們的靜態代理就是 將我們的靜態資源從我們的 tomcat 中 抽離出來,放在我們的 nginx中,然後讓我們的nginx來管理我們的 靜態資源。

 

我們 (1)這nginx 專門是用來 負載均衡的,它只有這一個功能。

 

用戶一個請求 到達我們的 (1)nginx,然後我們的(1)通過負載均衡 訪問我們的 (2)tomcat集羣中的一個tomcat來獲取動態資源,然後(1)同時也通過負載均衡訪問(3)nginx集羣中的一個nginx,然後獲取到靜態資源,也就是 (3)這個nginx是專門來做靜態代理的。

最後   靜態資源 + 動態資源 ===》 用戶需要的 。

 

 

  1. 的nginx配置文件中只有 負載均衡,沒有靜態代理的配置。
  2. 的nginx配置文件中只有 靜態代理,沒有負載均衡的配置。

 

 

需要注意的是: 

我們啓動nginx使用的 啓動配置文件的方式。

所以 上面 的動靜分離案例,我們需要使用啓動配置文件的方式 啓動 三個 nginx,也就是我們需要使用三個配置文件來啓動三個nginx。

還需要主義的是: 這三個nginx 全部都是 虛擬主機,注意了: nginx和tomcat不一樣,如果需要三個tomcat我們就必須解壓三份tomcat,而且我們tomcat啓動用的不是配置文件啓動的方式 。

如果我們 需要三個nginx,那麼我們就直接 創建三個nginx.conf配置文件,然後從配置文件中修改 nginx的端口號,這三個配置文件中的 server節點就代表一個 虛擬主機 ,也就是說 一個配置文件中 有一個 server節點,這一個節點就代表一個 虛擬主機 ,這一個虛擬主機就代表一個 ngnix。我們不需要像tomcat那樣解壓三份安裝包。我們的這三個nginx都是虛擬主機。

 

還需要明確的一點是:

我們靜態資源不是放在我們的nginx裏面的,我們是讓我們的 nginx管理我們的 靜態資源,就好像我們將靜態資源放進了我們的nginx中一樣,而且我們的nginx本身就是一個虛擬主機,沒有什麼實體而言,我們只是用這個虛擬主機 幫我們我們管理 某一個文件夾目錄下面的 靜態文件,注意了:nginx是幫助 我們 對 某個專門用來存放靜態資源的文件目錄 進行管理的,管理這個文件夾目錄下面的靜態資源。

 

 

 虛擬主機: 

虛擬主機就是 將一個 物理服務器 劃分成 多個 虛擬的服務器 。這樣我們的一臺物理服務器就可以當作多個服務器來使用,這樣就可以配置和部署多個網站 。

*********我們主要使用nginx提供的【虛擬主機】這個功能 來 部署多個網站。*********

  1. 虛擬主機這個功能讓我們不用安裝多個nginx,只需要配置相應個數的server節點,每一個節點 都是一個 虛擬主機。
  2. 如果想配置多個虛擬主機,那麼我們就配置多個server節點就行了。
  3. 每一個server節點就是一個虛擬主機。

爲什麼一個server等於一個虛擬主機?

我們可以在每一個server中配置一個端口,也就是從listen中配置端口號。

我們也可以從server_name配置我們需要的域名.

我們配置完成端口之後,我們可以從端口的下面:部署我們的網站。

也就是說 一個server可以爲我們開一個端口,我們可以從端口的裏面部署我們的一個網站。

 

我們在一個nginx中 配置多個 server節點,然後我們從節點中 配置端口,然後從端口裏面部署我們的 網站 。所以就有了一個nginx部署多個網站 。

 

第一個 轉發是:接收到靜態資源的請求後,然後轉發到 靜態資源的負載均衡。

第二個 轉發是:接收到動態資源的請求後,然後轉發到 動態資源的負載均衡。

總結: 轉發 一般都是 轉發 到 【負載均衡】 操作哪裏。

 

用域名來區分兩個不同的 虛擬主機 :因爲他們最後跳轉的位置不同。

 

 

城市站點網站項目部署:

每一個城市對應一個 城市網站,我們將這些網站部署在 不同的tomcat上面。

然後我們的 nginx上面生成對應tomcat個數的【虛擬主機】,而且我們的虛擬主機使用 域名作爲區分的 ,也就是說,每一個虛擬主機對應一個 城市的網站請求,這個虛擬主機對應的 域名 需要和 網站中的請求 域名相同,然後 根據域名進行 負載均衡分法。

如下圖:

 

***我們爲什麼要創建很多的虛擬主機,然後從這些虛擬主機裏面部署頁面呢?

一個虛擬主機就是一個server節點,我們可以在這個server節點中規定 我們部署頁面所在的 端口號 和 域名。

 

 

我們在配置完 我們的域名之後 需要在 hosts中 註冊一下。因爲我們系統會先去我們的 hosts文件中尋找我們的域名,找到我們域名然後就能知道與域名對應的ip地址,因爲hosts文件中 是以 鍵值對的方法時存放我們的 ip 和域名的: ip地址  域名 。

如果在hosts文件中找到了我們的域名,那麼就優先使用hosts文件中找到的域名對應的ip地址,如果沒有找到,那麼我們的系統就會去 DNS 中去尋找我們的域名,然後找到與域名對應的 ip地址,這裏的dns就是我們的國家域名服務器,如果我們的國家域名服務器都找不到這個域名的話,那麼就會去美國的域名服務器中找,也就是去根域名那邊去找 。

 

Hosts文件的位置:C:\Windows\System32\drivers\etc

 

對應的ip地址是我們linux的IP地址,所以就會通過我們的域名,從hosts文件中找到了linux的ip地址,然後就去了linux中去找對應的 網頁。

還有一種一個nginx部署多個站點的方法:

(1)nginx.conf是一個主文件。

(2)我們創建一個 nginx子配置文件,然後我們在子配置文件中寫我們圈2 裏面的配置,也就是在子配置文件中寫 三個站點對應的虛擬主機也就是對應的server節點的配置 。

然後我們再將我們的 子配置文件 導入到 我們主配置文件當中,所謂的導入也就是 在我們主配置文件(nginx.conf)中,加入到”http {}”部分的末尾,與其他server並列。

導入的語句爲:include /usr/local/nginx/conf/vhost/vhost.conf; 

這種方式 是 我們實際開發中 比較常用的,因爲結構清晰,主文件中沒有那麼多的 server節點來配置虛擬主機。

我們 在 /ust/local/nginx/conf 目錄下使用(mkdir vhost)創建一個 vhost目錄,然後再使用(vim vhost.conf)創建一個子配置文件。然後將我們server節點寫入到子配置文件中。後再vim nginx.conf文件的http節點的模爲加上include /usr/local/nginx/conf/vhost/vhost.conf; 這句話,就將我們的 子配置文件中 配置導入到 總配置文件中了。

 

總結:

Nginx 可以爲我們提供的 服務功能有:

 

  1. 動靜分離:
        1. 我們將 靜態資源 專門放在 linux的一個 目錄下。然後讓我們的 nginx 來進行管理。我們沒有將 靜態資源放在 nginx 中,原因:我們只是讓nginx幫我們管理靜態資源,而且我們也沒辦法將靜態資源放進nginx中 。
        2. 我們的 動態資源 就全權 由我們的tomcat來進行管理。
        3. Nginx 比較擅長 處理 靜態資源,tomcat 擅長處理 動態資源 ,這樣就可以各司其職,提高效率 。
        4. 我們在 idea 上 開發項目的時候 我們的 靜態資源和動態資源都是讓我們的 tomcat來統一進行管理的,而且我們將 項目部署到我們的 linux上之後,我們的 靜態資源雖然不由我們的 tomcat管理了,但是我們的項目中的靜態資源 也不能刪除,只不過 頁面中的 靜態資源的 請求 被我們的 nginx 攔截了,攔截之後 就去我們的 nginx管理的靜態資源目錄下 獲取 靜態資源了,只是不去我們的 tomcat部署的項目中去獲取資源了而已。但是我們的 tomcat部署的項目中也是有 靜態資源的。我們只是不通過tomcat來進行獲取了。

 

****實際開發中 我們 動靜分離 和 負載均衡 的 結合使用:

 

 

  1. 虛擬主機:

    (1)我們 只需要 在我們的 linux系統上 安裝一次nginx,然後使用虛擬主機的 理論,創建出 多臺 虛擬主機 ,這樣我們就可以 讓一臺 物理主機 當做 多臺 來使用,這樣我們就可以在這些 虛擬主機上 部署我們的 網站 。

(2)創建 多態 虛擬主機 不需要 安裝 多個nginx,我們有兩種方法:

1)複製 多分 nginx.conf配置文件,但是配置文件的名字不能相同,然後修改 配置文件中的配置,如端口號等等,然後啓動的時候,因爲我們是 使用 配置文件進行啓動的,所以有多少個虛擬主機,就要啓動多少份配置文件。

2)一個 虛擬主機 對應一個  server節點,我們 可以在 同一個nginx.conf配置文件中  創建 多個 server節點,然後 一個節點就代表一個 虛擬主機,這樣子就可以實現了 一份配置文件 創建多個虛擬主機,啓動nginx的時候,我們只需要 啓動 一份總的配置文件就可以了。

一、 我們在一份配置文件中 寫 多個 server節點 ,這些節點 是靠什麼區分的呢 ?

1. 根據端口號區分:我們在每一個server節點中設置不同的 端口號,這樣域名 +端口號 就 會 產生不同的路徑,所以說我們可以直接是用端口號來區分 虛擬主機。但是我們 的nginx默認端口號爲80,我們一般不是用 端口號區分虛擬主機。

2.我們一般也是最常用的是 通過 域名  來區分我們的 虛擬主機,只要這些 server配置的 域名不相同,那麼最後 域名 + 端口號 產生的路徑也是不一樣的,所以我們 常常使用 域名來 區分 虛擬主機,然後端口號都設置爲 默認的 80 。

  二、我們 在 同一個 nginx.conf 下 創建 多個 虛擬主機 有 方法 和 格式 :

1.直接 在 nginx.conf文件中 寫 所有的 server節點。

  這種方式 不需要 引入外部子配置文件,但是讓我們的nginx.conf總配置文件內容太過於混亂,而且我們 在實際開發中 虛擬主機和虛擬主機之間的功能是不一樣的,總配置文件對應的虛擬主機 主要是用來做 負載均衡的,其他的子虛擬主機是用來做 靜態代理的。

2. 我們將 所有的  子 虛擬主機 的 server節點 的配置 寫在一個 子配置文件中,然後在 總配置文件 的http{}模塊 在 最後 使用include 關鍵字 來引入 我們的 子配置文件,這樣子 我們總配置文件中的 server對應的虛擬主機 來做 負載均衡,子配置文件中的 server對應的虛擬主機 用來做 靜態代理。 我們實際開發中 經常使用這種方法,因爲層次清晰,不混亂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章