[網管實作]利用NGINX進行反向代理來訪問網頁服務

有時候在企業中會使用網頁伺服器架設多種服務,但是在多種服務中都是存在於同一台主機上甚至在多台主機上,為了保護後端的安全,反向代理(Reverse  Proxy)就是一個很重要的工具,使用反向代理除了會保護後端主機資訊外還能使用負載平衡來將用戶端得請求分散給後台多個網頁服務主機上,用來避免單點服務請求過大導致伺服器當機。

先來說說反向代理:

  1. 提高用戶連線速率:反向代理快取伺服器可以將經常存取的內容,如圖像、樣式表和靜態網頁,儲存在快取中。當用戶發出請求時,伺服器將直接提供已快取的內容,而不必重新生成或檢索,從而大幅降低了等待時間,提高了用戶的連線速率。
  2. 降低網站使用負載:反向代理快取伺服器能夠分擔伺服器的工作負載,減少了伺服器必須處理的請求數量。這意味著伺服器可以更有效地處理動態內容,如數據庫查詢,並減輕了伺服器的壓力,降低了可能的宕機風險。
  3. 保障網站安全性:反向代理伺服器充當了防火牆的角色,可過濾和攔截惡意流量,保護網站免受惡意攻擊和DDoS攻擊的威脅。此外,它可以提供SSL終端,確保數據在用戶和伺服器之間的傳輸是加密的,提高了通信的安全性。
  4. 雙向友善性:反向代理伺服器可以調整用戶請求,以提供最佳的用戶體驗。它可以根據用戶位置、瀏覽習慣和設備特性等信息,優化內容傳遞。同時,站方也可以透過反向代理伺服器實現簡單而有效的網站管理,包括負載平衡、容錯回復和即時監控等功能,確保站點持續運作。

測試環境如下:

  • FortiGateVM01 v7.4.1 – 10.100.253.101 >用於網頁NAT與DNS
  • Ubuntu 22.04 LTS – 192.168.10.2 >用於NGINX網頁服務
  • Windows Server 2019 -192.168.10.100 >用於後台IIS網頁服務 域名:api.godzeng.com
  • Windows PC -10.100.253.53 > 用於用戶端請求

首先在正常環境下為了能正常解析服務我在Fortigate 上設定 DNS 正解 api.godzeng.com 至 10.100.253.101,因為網頁服務透過防火牆對外NAT一組IP用來模擬在正常的環境下,這樣用戶端在打api.godzeng.com的時候會自動導向我們的網頁服務器上。

好的這時候我們成功訪問了該伺服器,這時候透過開發者模式可以看到使用的網頁伺服器版本與版號

同時在IIS上 也能看到客戶端的IP來訪問

這時候我們建一個反向代理再來測試一次,首先先在Ubuntu 建置 nginx

sudo apt update
sudo apt install nginx
sudo nano /etc/nginx/sites-enabled/default.conf

這時候會看到nginx的配置檔,接著再配置上加上自己的資訊

#用戶端會用到的訪問域名
server_name api.godzeng.com
# 反向代理到另一台網頁伺服器
proxy_pass http://192.168.10.100;

# 把 IP、Protocol 等 header 都一起送給反向代理的 server
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

設定完成記的 sudo service nginx reload

之後在防火牆的IP改成反向代理伺服器的IP

這時候我們再回來看這個網頁,一樣進開發者模式看會發現網頁伺服器版本與版號變了,這樣就說明流量透過反向代理到我們的網頁服務上。

這時候我們看nginx 上的日誌 來源有客戶端的IP

在IIS 上面看 現在流量都是透過nginx過來了


1121021更新

有人在問https的代理怎麼用?,我剛好更新在這邊

如果是乾淨的系統的話,首先要裝openssl憑證套件,接著建立一個目錄用來存放憑證相關文件

//安裝openssl 憑證套件
sudo apt install openssl
// 建立目錄來存放套件
sudo mkdir /etc/nginx/ssl

接著要產生自簽章的憑證,指令如下,他會把憑證放到剛剛的路徑裡。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

產生完成後接著再去NGINX的設定文件裡把SSL相關資訊補上。

   listen 443 ssl default_server;
   listen [::]:443 ssl default_server;
   ssl_certificate /etc/nginx/ssl/nginx.crt;
   ssl_certificate_key /etc/nginx/ssl/nginx.key;

sudo service nginx reload 重新載入一次,就可以看到熟悉的畫面了

總之,透過反向代理快取伺服器的應用,我們可以實現更快速、更穩定和更安全的網站運營,同時確保用戶和站方之間的互動更加友善和高效,我是阿俊謝謝觀看~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

AbuseIPDB Contributor Badge
返回頂端