我正在尝试在我的家庭网络上托管一个网页,只是想确保我在正确的轨道上。
我的 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:让更改传播并清除我的浏览器缓存后,外部代理服务器完全按照我的意愿工作。感谢大家的帮助
(对于网站)DNS 没有映射到特定端口的能力,HTTPS 需要是 443,HTTP 需要是 80,或者需要在 URL 中指定端口。
在提供静态 IP 地址的 VPN 上连接您的服务器或家庭网络可能是一种可行的方法,如果它物有所值的话。(即有一些 VPN 提供商旨在为您提供设备上的静态 IP 地址,而不是提供隐私服务 - 只需 google VPN 静态 IP,您会发现很多产品)
另一种方法是运行异地反向代理,但它可能比 VPN 路由更复杂且不便宜。
然后在其他地方托管代理。如果您不希望将端口添加到 URL,这是您的最佳选择。网络服务器本身或反向代理必须位于端口 80(或 HTTPS 的 443)上。
(这并不是说 DNS 不能有这样的机制——实际上它有几种可以指向特定端口的记录类型——但是除了通常的“地址”记录和浏览器之外,客户端还必须有意识地寻找它。由于各种原因,请勿使用它们。)
这没有多大意义——如果 IP 地址不是静态的,DNS 和反向代理的工作方式都不会不同。
对于反向代理,您要确保代理软件保留原始的“Host:”HTTP 标头(而不是根据代理目标添加一个)。在 Apache 中这是“ProxyPreserveHost”选项,在 Nginx 中可能是类似的。
无论 IP 地址是静态还是非静态,DNS 都不会对 URL 产生任何影响。如果您访问一个域并实际看到地址栏中的 URL 更改为其他内容(例如更改为 IP 地址),这不是由 DNS 完成的——它是由网络服务器明确发出 HTTP 级重定向到新 URL 完成的。(或者有时是 HTML 重定向。)