解決問題 Reverse Proxy (1)

教學目標

主要解決如何在 CentOS 7 作業系統上透過 Nginx 工具執行反向代理伺服器的問題。

重點概念

首先 Nginx 經常被用於反向代理伺服器 (Reverse Proxy),因為設定方便又簡單,同時反向代理伺服器通常會放置伺服器的 DMZ 區進行公開網路和私有網路之間的連線,以利避免攻擊者直接接觸到資料伺服器,同時透過設定就能夠有效降低伺服器的負載,至於正向代理伺服器通常會放置客戶端繞過防火牆取得網站資訊。

接著反向代理伺服器主要有三個特點,分別為:

  1. 負載平衡:反向代理伺服器主要在後端伺服器之前進行客戶端請求的負載分配,以利達到負載平衡的成效。
  2. 網頁加速:反向代理伺服器主要會壓縮輸入和輸出資料,同時也會快取共同的請求內容進行網頁加速,此外執行 SSL 加密將能夠降低網站伺服器的負載。
  3. 安全匿名:反向代理伺服器會透過攔截後端伺服器保護其身份,同時確保從單一網址存取多個伺服器。

再來我們可以透過下述指令在 CentOS 7 作業系統上安裝 Nginx 工具設定為反向代理伺服器。

增加 Nginx 儲存體

輸入下述指令,以利增加 Nginx 儲存體

1
$ sudo yum install epel-release

安裝 Nginx 伺服器

輸入下述指令,以利安裝 Nginx 伺服器。

1
$ sudo yum install nginx

啟動 Nginx 伺服器

輸入下述指令,以利啟動 Nginx 伺服器。

1
$ sudo systemctl start nginx

關閉防火牆設定

輸入下述指令,以利關閉防火牆設定。

1
2
3
$ sudo firewall-cmd --permanent --zone=public --add-service=http 
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload

測試 Nginx 伺服器啟動是否正常

開啟瀏覽器輸入下述網址,以利測試 Nginx 伺服器啟動是是否正常。

1
http://proxy.company.com

設定系統重啟時自動啟動 Nginx 伺服器

輸入下述指令,以利設定系統重啟時自動啟動 Nginx 伺服器。

1
$ sudo systemctl enable nginx

最後我們將可以開始設定反向代理伺服器 (Reverse Proxy)。

修改 Nginx 伺服器設定檔

輸入下述指令,以利修改 Nginx 伺服器設定檔。

1
$ vi /etc/nginx/nginx.conf

請修改其中「location / { }」內容為下述設定,其中 「http://server.company.com/」 為後端伺服器的網址:

1
2
3
4
5
6
7
location / {
proxy_pass http://server.company.com/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

重新啟動 Nginx 伺服器

輸入下述指令,以利重新啟動 Nginx 伺服器。

1
$ systemctl restart nginx

測試 Nginx 伺服器是否啟用反向代理的功能

開啟瀏覽器輸入下述網址,以利測試 Nginx 伺服器是否啟用反向代理的功能回傳後端伺服器的內容。

1
http://proxy.company.com

總結反向代理伺服器對於客戶端來說,它就是後端伺服器,並且客戶端不需要進行任何特別的設定,以及其工作流程主要有三個步驟,分別為:

  1. 使用者透過網域名稱發出存取網站伺服器的請求,同時該網域名稱會被解析為反向代理伺服器的 IP 位置。
  2. 反向代理伺服器接受使用者的請求。
  3. 反向代理伺服器會在緩存快取中查是否有請求的內容,找到之後直接將內容傳送給使用者,若是沒有則反向代理伺服器會代替使用者向網站伺服器發出請求,並且將內容回傳給使用者,並且進行緩存快取。

相關資源