如何在 Ubuntu 22.04 使用 Apache 作為 Reverse Proxy
反向代理伺服器是一種功能強大的工具,可充當用戶端和後端伺服器之間的中介,包括透過保護後端伺服器不直接暴露於互聯網來增強安全性、在多個伺服器之間分配客戶端請求的負載平衡以及透過向客戶端提供快取內容來提高效能的緩存。
我們會使用一台反向代理伺服器與後端伺服器來進行演示
安裝 Apache
首先,先在兩台伺服器上安裝 Apache 確認正常運作。
sudo apt update
sudo apt install -y apache2
sudo systemctl enable apache2
為了方便辨識連到的是哪一台伺服器,我們修改一下首頁文字。
sudo vi /var/www/html/index.html
反向代理伺服器更改如下
<body>
<div class="main_page">
<div class="page_header floating_element">
...
<div class="banner">
<div id="about"></div>
It works on reverse proxy!
</div>
...
<body>
後端伺服器更改如下
<body>
<div class="main_page">
<div class="page_header floating_element">
...
<div class="banner">
<div id="about"></div>
It works on application server!
</div>
...
<body>
為反向代理啟用 Apache 模組
為了有效利用 Apache Web Server 的反向代理,您必須啟用特定的 Apache 模組,這些模組對於支援反向代理伺服器所需的附加功能至關重要。
- mod_proxy:作為 Apache 的主要代理模組,可以有效地處理連線和重定向,讓 Apache 能夠充當底層後端伺服器的 Gateway。
- mod_proxy_http:對於在代理伺服器環境中支援 HTTP 和 HTTPS 請求是不可或缺的。
- mod_ssl: 用於對 SSL v3 和 TLS v1.x 協定的支援,建立安全加密的連線與確保資料完整性。
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo systemctl restart apache2
Apache 反向代理配置
停用預設的 Apache 虛擬主機設定檔
sudo a2dissite 000-default.conf
建立新的虛擬主機設定檔
cd /etc/apache2/sites-available/
sudo vi waf.your_domain.conf
虛擬主機允許 Apache 管理多個網域或子網域,每個網域或子網域都有自己獨特的設定和設定。
<VirtualHost *:80>
ServerName vmreverseproxydev001.your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://vmapplicationdev001.your_domain/
ProxyPassReverse / http://vmapplicationdev001.your_domain/
ProxyRequests Off
</VirtualHost>
使用 <VirtualHost> 指令定義虛擬主機,指定接受的 IP 位址和連接埠號碼。 * 允許接受所有 IP 位址,連接埠號碼 80 則代表 HTTP 連接埠。
配置還包括以下幾項:
- ServerName:此指令指定與伺服器關聯的網域名稱。
- ErrorLog:設定 Apache 遇到的錯誤的檔案的名稱。
- CustomLog:設定 Apache 將客戶端請求記錄到伺服器的檔案的名稱。
- ProxyPass:將遠端伺服器對應到本機伺服器的空間,並定義流量重定向的目標位址。它允許 Apache 充當反向代理,將請求轉發到後端伺服器並增強應用程式效能和負載分配。
- ProxyPassReverse:使用代理伺服器的資訊重寫後端伺服器的原始位置、內容位置和 URI HTTP 回應標頭,確保反向代理程式正確處理回應並防止後端伺服器暴露。
- ProxyRequests:防止 Apache 被用作轉送代理,從而增強安全性。
使用 a2ensite 指令啟用新的虛擬主機設定
sudo a2ensite waf.your_domain.conf
重新載入 Apache 以啟動新的虛擬主機
sudo systemctl reload apache2
接著我們對反向代理伺服器發出請求,回覆卻是後端伺服器的內容,也代表我們的反向代理設定成功囉。
Apache 反向代理配置 SSL
此外我們可以讓反向代理伺服器設定負責處理 SSL 加解密,從而釋放後端伺服器上的寶貴資源。
首先我們要註冊 DNS 如 waf.your_domain 與申請 SSL 憑證
將申請到的憑證與私鑰上傳至反向代理伺服器
sudo mkdir /etc/apache2/ssl
# 上傳憑證與私鑰
# SSLCertificateFile:server.cer(憑證)
# SSLCertificateKeyFile:server.key(私鑰)
更改虛擬主機設定檔
cd /etc/apache2/sites-available/
sudo vi waf.your_domain.conf
<VirtualHost *:80>
ServerName waf.your_domain
Redirect permanent / https://waf.your_domain/
</VirtualHost>
<VirtualHost *:443>
ServerName waf.your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://vmapplicationdev001.your_domain/
ProxyPassReverse / http://vmapplicationdev001.your_domain/
ProxyRequests Off
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
</VirtualHost>
重新載入 Apache 以啟動新的虛擬主機
sudo systemctl reload apache2
瀏覽器不但可以自動轉址到 HTTPS 使用安全的連線,後端伺服器仍然是使用 HTTP 進行通訊,是不是很方便。
今天的分享就到這邊,希望有幫助到大家。