我正在尝试在我的家庭网络上托管一个网页,只是想确保我走在正确的轨道上。
我的 ISP 没有静态 IP,而且他们阻止了 80 端口入站,所以这特别困难
我当前的设置使用 no-ip 为我的网络创建一个静态地址,即abc.ddns.net
指向a.b.c.d
我有一个托管的网络服务器,并且端口转发到http://abc.ddns.net:100
并且可以从外部访问它,但是我不喜欢记住端口并且发现进入起来很笨拙。
所以我一直在尝试解决这个问题,我目前的想法是有一个路由site.ddns.net
到的子域名http://abc.ddns.net:100
,但这会物理地改变地址栏,我想避免这种情况 No-Ip 提供了一个域名屏蔽功能,它将重定向,同时将域名保留在地址栏中,但这不会更新,所以和abc.ddns.net:100/
都abc.ddns.net:100/page1
显示为site.ddns.net
。这不是最糟糕的解决方案,但并不理想
我也对运行 Nginx 的代理服务器进行了一些实验,这里的问题是端口80
仍然被阻止,因此流量需要通过端口路由81
,而且因为我没有静态 IP,所以所有流量都会解析到a.b.c.d:81
最终将来自不同子域的流量视为同一请求
无论如何,我的设置已经变得太复杂了。简而言之,我希望有一个域名abc.ddns.net
映射到 ,my.public.ip.address:port
其他子域名也site.ddns.net
映射到my.public.ip.address:port2
,同时在非静态 IP 和端口80
+上443
被阻止,并且浏览器不会将地址恢复到实际端口
编辑:我已经在我的网络之外设置了一个代理服务器,但我仍然无法向@user1686 解释我这么说的原因
另外因为我没有静态 IP,所以所有流量都解析为 abcd:81,最终将来自不同子域的流量视为同一请求
因为在 nginx 上设置阻塞时看起来像这样
server {
listen 80;
server_name site.ddns.net;
location / {
proxy_pass http://abc.ddns.net:100;
proxy_set_header site.ddns.net;
}
}
流量不会转发,site.ddns.net
而是发送到默认的 nginx 页面
但是如果我添加
server {
listen 80;
server_name upload-server.ddns.net;
location / {
proxy_pass http://llibyddap.ddns.net:100;
proxy_set_header upload-server.ddns.net;
}
}
server {
listen 80;
server_name a.b.c.d
location / {
proxy_pass http://abc.ddns.net:100;
}
}
它正确地路由了流量,我将其解释为 no-ip 在发送请求之前物理地改变了它,site.ddns.net
导致a.b.c.d
它错过了服务器块。虽然我并不完全确定,而且可能不正确。
这个问题意味着代理服务器将把所有子域路由到同一点。
编辑 2:在传播更改并清除浏览器缓存后,外部代理服务器完全按照我的要求运行。感谢大家的帮助
答案1
(对于网站)DNS 无法映射到特定端口,HTTPS 需要为 443 或 HTTP 需要为 80,或者需要在 URL 中指定端口。
如果值得花费少量成本,那么将您的服务器或家庭网络连接在提供静态 IP 地址的 VPN 上可能是可行的方法。(即,有些 VPN 提供商旨在为您的设备提供静态 IP 地址,而不是提供隐私服务 - 只需谷歌搜索 VPN 静态 IP,您就会找到很多产品)
另一种方法是运行异地反向代理,但它可能更复杂,而且并不比 VPN 路由更便宜。
答案2
我也对运行 Nginx 的代理服务器进行了一些实验,这里的问题是端口 80 仍然被阻止,因此流量需要通过端口 81 路由
然后将代理托管到其他地方。如果您不希望将端口添加到 URL,那么这是最好的选择。无论是 Web 服务器本身还是反向代理,都必须位于端口 80(或 HTTPS 的 443)上。
(并不是说 DNS 没有这样的机制——事实上它有几种可以指向特定端口的记录类型——但这是客户端除了通常的“地址”记录之外还必须刻意寻找的东西,而浏览器由于各种原因不使用它们。)
另外因为我没有静态 IP,所以所有流量都解析为 abcd:81,最终将来自不同子域的流量视为同一请求
这没有多大意义——如果 IP 地址不是静态的,DNS 和反向代理的工作方式都不会有什么不同。
对于反向代理,您需要确保代理软件保留原始的“Host:”HTTP 标头(而不是根据代理目标添加一个)。在 Apache 中,这是“ProxyPreserveHost”选项,在 Nginx 中可能是类似的。
DNS 对 URL 没有任何影响,无论 IP 地址是静态还是非静态。如果您访问某个域,并且实际上看地址栏中的 URL 更改为其他内容(例如 IP 地址),这不是由 DNS 完成的 - 它由 Web 服务器明确发出到新 URL 的 HTTP 级重定向完成。(有时是 HTML 重定向。)