使用 Apache2 當 Reverse Proxy 伺服器
Toby
Toby

因為最近房東在沒經我同意之前在房間的網絡上遊加入了一台 NAT 路由器,所以原本架在我的房間裡的 ArozOS 伺服器就沒辦法在外面連線了。想了想,於是我想到了可以透過 zeroTier 和 Reverse Proxy 來使用我房間裡的伺服器,所以便開始研究怎樣可以弄到一台 Reverse Proxy 的伺服器。

網絡上很多人喜歡用 nginx 來當 RP伺服器,可是基於某些原因我並沒有太喜歡它所以我就選擇用 Apache2 了。首先,安裝 apache2

sudo apt-get update
sudo apt-get install apache2 -y

然後就是編輯它的設定檔,加入你需要 proxy 的目標

sudo nano /etc/apache2/sites-available/000-default.conf
NameVirtualHost *:80

<VirtualHost *:80>
ServerName ixtw.hkwtc.com
ProxyPass / http://{zerotier 的區網 ip}:8080/
ProxyPassReverse / http://{zerotier 的區網 ip}:8080/
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/html
</VirtualHost>

然後 Enable Proxy 插件並重啟 apache 2

sudo a2enmod proxy_http
sudo systemctl restart apache2

可是,WebSocket 要求過不去欸?

這是因為要 proxy websocket 會需要額外的 module 去處理,首先啟用 wstunnel 跟 rewrite engine

sudo a2enmod proxy_wstunnel
sudo a2enmod rewrite
sudo systemctl restart apache2

然後加入 RewriteCond 跟 RewriteRule

<VirtualHost *:80>
        ServerName ixtw.hkwtc.org

        RewriteEngine On
        RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
        RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
        RewriteRule /(.*) ws://192.168.196.15:8082/$1 [P,QSA,L]

        ProxyPass / http://192.168.196.15:8082/
        ProxyPassReverse / http://192.168.196.15:8082/
</VirtualHost>

最後再重啟一次 apache

sudo systemctl restart apache2

這樣就完成了!