基本上我想做的是讓本地家庭伺服器可以在網路上公開存取。不幸的是,我的 ISP 使用 CGNAT,要獲得公共 IP,我需要支付額外費用(約 50 美元)。我認為使用 VPS 更便宜。
因此,我透過執行 Ubuntu 20.04 的 Compute Engine VM 在 Google Cloud 中設定了 Wireguard 伺服器。我還為家裡的本地伺服器設定了 Wireguard 用戶端,並將其連接到 Google Cloud 中的 Wirequard 伺服器。最後,我在 Android 手機上安裝了另一個 Wireguard 用戶端,將其連接到伺服器,一切正常。當我在 Android 手機上使用wireguard時,我可以從外部看到我的本地伺服器(使用行動數據進行測試)。
現在我想讓家裡的本地伺服器可供公眾使用。我有一個網域並設定了必要的記錄。當我 ping 它時,它返回 GCE VM 的公共 IP,我相信這意味著它工作正常。接下來我在我的 GCE VM 中安裝了 Nginx。運作良好。我能夠透過網域和公用 IP 位址存取預設的 Nginx 頁面。然後我使用以下命令修改了預設配置並重新啟動了 Nginx。
server {
listen 80;
listen [::]:80;
server_name sub.domain.org; #sample only
location / {
proxy_redirect http://10.200.200.2 http://sub.domain.org;
}
}
我的 Wireguard 位於 10.200.200.x IP 範圍(不確定這是否是正確的術語),10.200.200.2 是我本地家庭伺服器的wireguard IP 位址。
我可能不明白 Nginx 是如何運作的,但我期望透過 Nginx,我將能夠透過瀏覽公開存取我的本地家庭伺服器http://sub.domain.org。不幸的是我無法公開訪問它。只有當我連接到wireguard 時才能存取它。
我還有什麼需要做的嗎?
感謝任何反饋。
答案1
ngx_http_proxy_module
您應該閱讀at的文檔http://nginx.org/en/docs/http/ngx_http_proxy_module.html。
各州的文件proxy_redirect
:
設定應在代理伺服器回應的「位置」和「刷新」標頭欄位中變更的文字。
因此,目前您只建議 nginx 更改某些標頭中的某些文本,但不要將任何流量傳遞到(主伺服器)目標。
你至少需要一個proxy_pass
指示使之發揮作用。
請記住,nginx 不會替換您網站的內容!因此,如果您的家庭伺服器上的網站提供絕對路徑,則需要修復該問題。