
因此,我家裡有一台Synology NAS,運行著一些服務,我需要從WWW 訪問這些服務,但可以理解的是,我不想將我的家庭IP 上的連接埠開放到廣泛的互聯網(特別是因為外部服務需要在連接埠上存取我的伺服器) 443) - 所以我決定在安裝了Ubuntu 22.04 的Oracle Cloud 上啟動一個Always Free 實例(0.48Gbps 連接、1 個CPU、1GB RAM),並在其上安裝nginx,以便從我的家庭網路外部存取這些服務。然後,我僅向雲端執行個體的 IP 位址開放路由器上的連接埠。
我確實有透過 SSH 管理 Linux 伺服器的經驗,但這是我第一次使用 nginx,更不用說反向代理了。
在測試過程中,我將連接埠對所有 IP 開放,因此我可以直接或透過反向代理測試傳入我的實驗室的流量。這就是我開始掙扎的地方:
- 當我直接訪問在上游伺服器上運行的 phpMyAdmin 時(我只是查詢https://pma.upstream.mydomain.xyz:openedPort在我的瀏覽器中),它會立即加載 - 即使快取被清除
- 當我透過反向代理程式存取上游伺服器上執行的 phpMyAdmin 時(透過查詢https://pma.reverseproxy.mydomain.xyz:443在我的瀏覽器中),清除瀏覽器快取後需要一分多鐘的時間才能載入。當快取已經加載時,它並不那麼慢(可能10秒),但它仍然比直接查詢上游伺服器慢得多(當我關閉更廣泛的互聯網連接埠時,這是不可能的)。檢查瀏覽器控制台後,花費時間最長的是 phpMyAdmin 用作圖示的微小 PNG(每個圖片最多幾百位元組)和較大的 CSS/JS 檔案(幾十 KB)。
當我透過反向代理訪問上游伺服器上的不同站點時,我似乎沒有遇到這些問題,儘管它確實沒有提供那麼多微小的 JS 和 PNG 文件,大部分只是文本
下面是我的 nginx 伺服器區塊設定。有人知道我可能出錯的地方嗎?任何建議將不勝感激。
server {
listen 443 ssl http2;
server_name pma.reverseproxy.mydomain.xyz;
sendfile on;
tcp_nodelay on;
tcp_nopush on;
ssl_certificate /etc/letsencrypt/live/reverseproxy.mydomain.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reverseproxy.mydomain.xyz/privkey.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
set $backend_server https://pma.upstream.mydomain.xyz:openedPort;
location / {
proxy_pass $backend_server;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host pma.upstream.mydomain.xyz;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffer_size 128k;
proxy_buffers 8 256k;
proxy_busy_buffers_size 256k;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
proxy_read_timeout 20s;
}
}