基本上,我想要做的是让本地家庭服务器在互联网上公开访问。不幸的是,我的 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 不会替换您网站的内容!因此,如果您主服务器上的网站提供绝对路径,则需要修复此问题。