天天看點

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

目錄

1.Nginx知識網結構圖

1.1反向代理

1.2負載均衡

1.3動靜分離

2. nginx如何在linux安裝

3. nginx常用指令

4.nginx的配置檔案

4.1 反向代理實戰

4.2 反向代理小結

4.3 負載均衡實戰

4.4 動靜分離實戰

5.nginx高可用

5.1安裝keepalived

6.原了解析

小結

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

Nginx是一個高性能的HTTP和反向代理伺服器,特點是占用記憶體少,并發能力強,事實上nginx的并發能力确實在同類型的網頁伺服器中表現較好

nginx專為性能優化而開發,性能是其最重要的要求,十分注重效率,有報告nginx能支援高達50000個并發連接配接數

正向代理

正向代理:區域網路中的電腦使用者想要直接通路網絡是不可行的,隻能通過代理伺服器來通路,這種代理服務就被稱為正向代理。

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

反向代理

反向代理:用戶端無法感覺代理,因為用戶端通路網絡不需要配置,隻要把請求發送到反向代理伺服器,由反向代理伺服器去選擇目标伺服器擷取資料,然後再傳回到用戶端,此時反向代理伺服器和目标伺服器對外就是一個伺服器,暴露的是代理伺服器位址,隐藏了真實伺服器IP位址

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

用戶端發送多個請求到伺服器,伺服器處理請求,有一些可能要與資料庫進行狡猾,伺服器處理完畢之後,再将結果傳回給用戶端

普通請求和響應過程

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

但是随着資訊數量增長,通路量和資料量飛速增長,普通架構無法滿足現在的需求

我們首先想到的是更新伺服器配置,可以由于摩爾定律的日益失效,單純從硬體提升性能已經逐漸不可取了,怎麼解決這種需求呢?

我們可以增加伺服器的數量,建構叢集,将請求分發到各個伺服器上,将原來請求集中到單個伺服器的情況改為請求分發到多個伺服器,也就是我們說的負載均衡

圖解負載均衡

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

假設有15個請求發送到代理伺服器,那麼由代理伺服器根據伺服器數量,平均配置設定,每個伺服器處理5個請求,這個過程就叫做負載均衡

為了加快網站的解析速度,可以把動态頁面和靜态頁面交給不同的伺服器來解析,加快解析的速度,降低由單個伺服器的壓力

動靜分離之前的狀态

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

動靜分離之後

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

檢視版本

./nginx -v

1

啟動

./nginx

關閉(有兩種方式,推薦使用 ./nginx -s quit)

 ./nginx -s stop

 ./nginx -s quit

2

重新加載nginx配置

./nginx -s reload

配置檔案分三部分組成

全局塊

從配置檔案開始到events塊之間,主要是設定一些影響nginx伺服器整體運作的配置指令

并發處理服務的配置,值越大,可以支援的并發處理量越多,但是會受到硬體、軟體等裝置的制約

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

events塊

影響nginx伺服器與使用者的網絡連接配接,常用的設定包括是否開啟對多workprocess下的網絡連接配接進行序列化,是否允許同時接收多個網絡連接配接等等

支援的最大連接配接數

http塊

諸如反向代理和負載均衡都在此配置

location指令說明

該文法用來比對url,文法如下

location[ = | ~ | ~* | ^~] url{

}

3

=:用于不含正規表達式的url前,要求字元串與url嚴格比對,比對成功就停止向下搜尋并處理請求

~:用于表示url包含正規表達式,并且區分大小寫。

~*:用于表示url包含正規表達式,并且不區分大瞎寫

^~:用于不含正規表達式的url前,要求ngin伺服器找到表示url和字元串比對度最高的location後,立即使用此location處理請求,而不再比對

如果有url包含正規表達式,不需要有~開頭辨別

配置反向代理

目的:在浏覽器位址欄輸入位址www.123.com跳轉linux系統tomcat首頁面

具體實作

先配置tomcat:因為比較簡單,此處不再贅叙

并在windows通路

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

具體流程

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

修改之前

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

配置

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

再次通路

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

反向代理2

1.目标

通路http://192.168.25.132:9001/edu/ 直接跳轉到192.168.25.132:8080

通路http://192.168.25.132:9001/vod/ 直接跳轉到192.168.25.132:8081

2.準備

配置兩個tomcat,端口分别為8080和8081,都可以通路,端口修改配置檔案即可。

nginx會預設将該url請求轉到80端口_輕松搞定Nginx
nginx會預設将該url請求轉到80端口_輕松搞定Nginx

建立檔案内容分别添加8080!!!和8081!!!

nginx會預設将該url請求轉到80端口_輕松搞定Nginx
nginx會預設将該url請求轉到80端口_輕松搞定Nginx

響應如下

nginx會預設将該url請求轉到80端口_輕松搞定Nginx
nginx會預設将該url請求轉到80端口_輕松搞定Nginx

3.具體配置

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

重新加載nginx

通路

nginx會預設将該url請求轉到80端口_輕松搞定Nginx
nginx會預設将該url請求轉到80端口_輕松搞定Nginx

實作了同一個端口代理,通過edu和vod路徑的切換顯示不同的頁面

第一個例子:浏覽器通路www.123.com,由host檔案解析

出伺服器ip位址

192.168.25.132 www.123.com

然後預設通路80端口,而通過nginx監聽80端口代理到本地的8080端口上,進而實作了通路www.123.com,最終轉發到tomcat 8080上去

第二個例子:

實際上就是通過nginx監聽9001端口,然後通過正規表達式選擇轉發到8080還是8081的tomcat上去

1.修改nginx.conf

nginx會預設将該url請求轉到80端口_輕松搞定Nginx
nginx會預設将該url請求轉到80端口_輕松搞定Nginx

2.重新開機nginx

3.在8081的tomcat的webapps檔案夾下建立edu檔案夾和a.html檔案,填寫内容為8081!!!!

4.在位址欄回車,就會分發到不同的tomcat伺服器上

nginx會預設将該url請求轉到80端口_輕松搞定Nginx
nginx會預設将該url請求轉到80端口_輕松搞定Nginx

3.負載均衡方式

輪詢(預設)

weight,代表權,權越高優先級越高

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

fair,按後端伺服器的響應時間來配置設定請求,相應時間短的優先配置設定

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

ip_hash,每個請求按照通路ip的hash結果配置設定,這樣每一個訪客固定的通路一個後端伺服器,可以解決session 的問題

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

什麼是動靜分離

把動态請求和靜态請求分開,不是講動态頁面和靜态頁面實體分離,可以了解為nginx處理靜态頁面,tomcat處理動态頁面

動靜分離大緻分為兩種:一、純粹将靜态檔案獨立成單獨域名放在獨立的伺服器上,也是目前主流方案;二、将動态跟靜态檔案混合在一起釋出,通過nginx分開

動靜分離圖析

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

實戰準備

準備靜态檔案

nginx會預設将該url請求轉到80端口_輕松搞定Nginx
nginx會預設将該url請求轉到80端口_輕松搞定Nginx

配置nginx

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

如果nginx出現問題

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

解決辦法

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

前期準備

兩台nginx伺服器

安裝keepalived

虛拟ip

[root@192 usr]# yum install keepalived -y

[root@192 usr]# rpm -q -a keepalived

keepalived-1.3.5-16.el7.x86_64

修改配置檔案

[root@192 keepalived]# cd /etc/keepalived

[root@192 keepalived]# vi keepalived.conf 

分别将如下配置檔案複制粘貼,覆寫掉keepalived.conf

虛拟ip為192.168.25.50

對應主機ip需要修改的是

smtp_server 192.168.25.147(主)smtp_server 192.168.25.147(備)

state MASTER(主) state BACKUP(備)

global_defs {

   notification_email {

     [email protected]

     [email protected]

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 192.168.25.147

   smtp_connect_timeout 30

   router_id LVS_DEVEL # 通路的主機位址

vrrp_script chk_nginx {

  script "/usr/local/src/nginx_check.sh"  # 檢測檔案的位址

  interval 2   # 檢測腳本執行的間隔

  weight 2   # 權重

vrrp_instance VI_1 {

    state BACKUP    # 主機MASTER、備機BACKUP    

    interface ens33   # 網卡

    virtual_router_id 51 # 同一組需一緻

    priority 90  # 通路優先級,主機值較大,備機較小

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.25.50  # 虛拟ip

[root@192 sbin]# systemctl start keepalived.service

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

通路虛拟ip成功

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

關閉主機147的nginx和keepalived,發現仍然可以通路

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

如下圖,就是啟動了一個master,一個worker,master是管理者,worker是具體工作的程序

nginx會預設将該url請求轉到80端口_輕松搞定Nginx

繼續閱讀