Nginx 從入門開始的網站架設 (3)

把 Nginx 設定為 Proxy Server

上一篇文章 中我們用最簡單的設定建立起一個靜態服務了,接下來要提到的是 Nginx 最廣為人知的其中一種功能--代理伺服器(Proxy Server)。

Proxy Server 代理伺服器

有一陣子募資平台很流行,當你有想法但是沒有資金的時候,你可以透過這些平台把你的計劃放上去,吸引一般民眾投入資金,接著拿這些錢去實際生產你的產品,並給當初提供你資金的民眾一些回饋。在這個過程中,募資平台所扮演的角色就是代理:你只能看到資金提供者的提供的寄件資訊,甚至完全不知道他們的身分,但你會負責把你的產品或回饋透過平台提供出去。

以網路來說,Client(一般民眾)透過代理伺服器(募資平台)發送請求給 Server(你),Server 基本上不會有 Client 的資料,而這就是 Proxy 的好處之一:隱藏 Client 的真實身分。

其他的好處還有很多,但今天我只想看這次客戶最主要的目的:Load Balance(負載平衡)。

Load Balance 負載平衡

Load Balance 的主要目的在於分散伺服器端的壓力,讓伺服器的回應速度和其他效能可以得到提升,使用者能擁有更好的體驗。而要做到這個程度一般來說都會需要依賴剛剛所提到的 proxy 做為中繼站,去判斷現在接收到的這個 request 要被分配到哪一台 server 上。


Nginx 設定

稍微了解 Proxy Server 和 Load Balance 的用途之後,接下來開始試著用 Nginx 來進行設定吧。

Proxy

首先設定好 nginx.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
events {
    worker_connections  1024;
}

http {
    server {
        listen       8081;
        server_name  localhost;
		
        # 以 '/' 開頭的 url 會向 '/data/www' 發送請求
        location / {
	          # 設定要導向的路徑
            # 如果 IIS 上有設定 8082 port 的站台就會被導向那個站台
            proxy_pass http://localhost:8082;
        }
    }
  
    # IIS 上沒有的站台,設定 8082 port 的內容
    server {
        listen       8082;
        server_name  localhost;
		
        # 以 '/' 開頭的 url 會向 '/data/www2' 發送請求
        location / {
	          root data/www2;
        }
    }
}

接著到 /data/www2 底下新增一個新的 index.html,這時候 wwwwww2 的資料夾內各有一個 index.html,上一篇文章中我們會看到 www 內的 index.html,這一次的設定預期會出現的應該是 www2 內的 index.html

儲存修改好的 config 之後,nginx -s reload 重新載入檔案,在瀏覽器中輸入 http://localhost:8081 應該就可以看到 www2index.html 的內容囉。

Load Balance

要在 Nginx 中使用 Load Balance 需要在 http 中加入 upstream 這組設定,加好之後你的 nginx.conf 應該會長這樣:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
events {
    worker_connections  1024;
}

http {
    # 'localhost' 是這組 upstream 的名稱
    upstream localhost {
        # 利用 'weight' 來設定權重
        server localhost:8082 weight=1;
        server localhost:8083 weight=2;
    }
	
    server {
        listen              8081;
        server_name         localhost;

        location / {
            # 這裡要改成 upstream 的名稱
            proxy_pass       http://localhost;
        }
    }
	
    server {
        listen              8082;
        server_name         localhost;

        location / {
            # 在 nginx.exe 同一層的資料夾 data 裡面新增一個資料夾 www 和 index.html
            root            data/www;
        }
    }
	
    server {
        listen              8083;
        server_name         localhost;

        location / {
            # 在 nginx.exe 同一層的資料夾 data 裡面新增一個資料夾 www2 和 index.html
            root            data/www2;
        }
    }
}

設定好之後 nginx -s reload,瀏覽器打開 http://localhost:8081,持續重新整理,就可以看到交替出現的兩個 index.html 囉~

位於 8083 中 www2 的 index.html

位於 8082 中 www 的 index.html

參考資料:

Built with Hugo
Theme Stack designed by Jimmy