反向代理服務-Nginx

語言: CN / TW / HK

一、Nginx簡介

Nginx 是一個很強大的高效能Web反向代理服務,它具有很多非常優越的特性:

  • Nginx專為效能優化而開發,效能是其最重要的考量,實現上非常注重效率。其優點是佔有記憶體少,併發能力強,能夠支援高達 50,000 個併發連線數的響應。
  • Nginx作為負載均衡服務:Nginx 既可以在內部直接支援 Rails 和 PHP 程式對外進行服務,也可以支援作為 HTTP代理服務對外進行服務。
  • 處理靜態檔案,索引檔案以及自動索引;開啟檔案描述符緩衝。
  • 無快取的反向代理加速,簡單的負載均衡和容錯。
  • 模組化的結構。

二、Docker下安裝Nginx

2.1 安裝思路

步驟一:啟動一個臨時的nginx;

步驟二:拷貝nginx配置至需要掛載的本地目錄;

步驟三:建立並執行新的nginx容器。

2.2 具體執行步驟

```shell

1. 建立要掛載的配置目錄。

$ mkdir -p /mydata/nginx/conf

2. 啟動臨時nginx容器。

$ docker run -p 80:80 --name nginx -d nginx:1.10

3. 拷貝出 Nginx 容器的配置。

3.1 將nginx容器中的nginx目錄複製到本機的/mydata/nginx/conf目錄。

$ docker container cp nginx:/etc/nginx /mydata/nginx/conf

3.2 複製的是nginx目錄,將該目錄的所有檔案移動到 conf 目錄。

$ mv /mydata/nginx/conf/nginx/* /mydata/nginx/conf/

3.3 刪除多餘的 /mydata/nginx/conf/nginx目錄。

$ rm -rf /mydata/nginx/conf/nginx

4. 刪除臨時nginx容器。

4.1 停止執行 nginx 容器。

$ docker stop nginx

4.2 刪除 nginx 容器。

$ docker rm nginx

5. 啟動新的 nginx 容器。

$ docker run -p 80:80 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -v /mydata/nginx/conf/:/etc/nginx \ -d nginx:1.10

6. 設定 nginx 隨 Docker 啟動。

$ docker update nginx --restart=always ```

2.3 測試是否安裝成功

  • 修改index頁展示效果

```shell $ echo '

hello nginx!

' \

/mydata/nginx/html/index.html ```

  • 通過yourIp進行頁面訪問

image-20220601164359406

三、Nginx反向代理

3.1 什麼是反向代理?

在介紹什麼是反向代理之前,我們首先了解一下正向代理

Nginx 不僅可以做反向代理,實現負載均衡,還能用作正向代理來進行上網等功能。

  • 正向代理
  • 概念:如果把區域網外的 Internet 想象成一個巨大的資源庫,則區域網中的客戶端要訪問 Internet,則需要通過代理伺服器來訪問,這種代理服務就稱為正向代理。
  • 應用場景:由於工作環境原因,日常工作只能侷限於單位的區域網,如果想要訪問網際網路,怎麼辦呢?這時就需要用到正向代理,讓代理伺服器幫助我們進行資源的訪問。(需要在客戶端配置代理伺服器進行指定網站訪問)
  • 反向代理
  • 概念:其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問。我們只需要將請求傳送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取資料後,在返回給客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴露的是代理伺服器地址隱藏真實伺服器 IP 地址
  • 應用場景:我們要訪問網站時無需知道具體的伺服器IP,而是通過域名訪問代理伺服器,代理服務再來幫我們進行請求轉發。
  • 正向代理及反向代理示意圖

image-20220603075356422

3.2 配置檔案

3.2.1 檢視配置

```shell

切換至配置檔案所在目錄。

$ cd /mydata/nginx/conf/

檢視配置檔案。

$ cat nginx.conf ```

3.2.2 配置說明

```conf

主程序叫master,負責管理子程序,子程序叫worker

worker_processes配置項表示開啟幾個業務程序,一般和cpu核數有關

worker_processes 1;

events { worker_connections 1024; }

http { # include表示可以引入其他檔案,此處表示引入http mime型別 include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65;

# 虛擬主機,可以配置多個
server {
    listen       80;
    server_name  localhost;

    location / {
        # 路徑匹配之後,哪個目錄下去匹配相應的網頁,html是相對路徑
        root   html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

```

3.2.3 第一部分:全域性塊

conf worker_processes 1;

說明

  • 從配置檔案開始到 events 塊之間的內容,主要會設定一些影響 Nginx 伺服器整體執行的配置指令。
  • 主要包括:配置執行 Nginx 伺服器的使用者(組)、允許生成的 worker process 數,程序 PID 存放路徑、日誌存放路徑和型別以及配置檔案的引入等。

  • 上面這行 worker_processes 配置,是 Nginx 伺服器併發處理服務的關鍵配置,該值越大,可以支援的併發處理量也越多但是會受到硬體、軟體等裝置的制約

3.2.4 第二部分:events 塊

conf events { worker_connections 1024; }

說明

  • events 塊涉及的指令主要影響 Nginx 伺服器與使用者的網路連線
  • 常用的設定包括:是否開啟對多 work process下的網路連線進行序列化,是否允許同時接收多個網路連線,選取哪種事件驅動模型來處理連線請求,每個 work process 可以同時支援的最大連線數等

  • 上述例子就表示每個 work process 支援的最大連線數為 1024。這部分的配置對 Nginx效能影響較大,在實際中應該靈活配置。

3.2.5 第三部分:http 塊

```conf 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全域性塊:配置的指令包括檔案引入、MIME-TYPE 定義、日誌自定義、連線超時時間、單鏈接請求數上限等。

  • server 塊:這塊和虛擬主機有密切關係,虛擬主機從使用者角度看,和一臺獨立的硬體主機是完全一樣的,該技術的產生是為了 節省網際網路伺服器硬體成本。每個 http 塊可以包括多個 server 塊,而每個 server 塊相當於一個虛擬主機。而每個 server 塊也分為全域性 server 塊,以及可以同時包含多個locaton 塊

  • 全域性 server 塊:最常見的配置是本虛擬機器主機的監聽配置和本虛擬主機的名稱或IP配置。
  • location 塊:一個 server 塊可以配置多個 location 塊。主要作用是基於 Nginx 伺服器接收到的請求字串(例如 server_name/uri-string),對虛擬主機名稱 (也可以是IP 別名)之外的字串(例如 前面的 /uri-string)進行匹配,對特定的請求進行處理。 地址定向、資料快取和應答控制等功能,還有許多第三方模組的配置也在這裡進行。

3.2.6 一圖說明nginx.conf配置

image-20220603095403290

3.3 反向代理實踐

3.3.1 需求:使用 Nginx反向代理,訪問 www.123.com 直接跳轉到 127.0.0.1:8080。

3.3.2 示意圖

image-20220603101221594

3.3.3 實踐過程

  • 步驟一:修改hosts檔案,配置域名和 ip 對應關係

```tex

hosts檔案路徑

C:\Windows\System32\drivers\etc ```

image-20220603102158328

  • 步驟二:配置nginx監聽

說明:nginx反向代理服務監聽 192.168.8.880埠,如果有請求過來,則轉到proxy_pass配置的對應伺服器上。

```conf server { listen 80; server_name 192.168.8.8;

location / {
    root   html;
    index  index.html index.htm;
    proxy_pass  http://127.0.0.1:8080
}

} ```

  • 步驟三:瀏覽器訪問測試

說明:不加埠號時預設為 80埠。

image-20220603103403151

四、結束語

“-------怕什麼真理無窮,進一寸有一寸的歡喜。”

微信公眾號搜尋:餃子泡牛奶

「其他文章」