use*_*003 2 networking dns home-networking subdomain
我的家庭服务器上有一个 Web 应用程序在非标准端口 ( 9177) 上运行。在我的本地网络上,我可以直接以http://192.168.0.13:9177/.
但是,我想公开地向全世界公开。我拥有一个域 ( example.com),我想指向app.example.com我本地运行的应用程序。
做这个的最好方式是什么?我需要运行 DNS 服务器吗?如果是这样,它在哪里运行以及使用哪些工具来配置它?
你可以假设我的路由器有一个固定的 IP,在这个问题的范围内不会改变。DNS 记录已正确配置为指向我的路由器。
谢谢!
Ana*_*man 10
我是否需要运行 DNS 服务器 [这样做]?
不可以。您需要运行反向代理。Apache 或 nginx 都是可用于此目的的 Web 服务器。
简而言之,您将为 创build一个虚拟主机(Apache)或服务器块(nginx)app.example.com,然后将其设置为转发app.example.com对例如 的请求http://192.168.0.13:9177。
关于 DNS,app.example.com将指向您的公共 IP(通常是您的路由器,然后将 Web 请求定向到您的反向代理)。
其他答案都是正确的,但我会详细说明一些更小的细节。
要意识到的第一件事是 - 当您http://app.example.com/path/to/resource.jpeg在浏览器中输入内容时,浏览器所做的第一件事就是使用 DNS 系统将其转换app.example.com为您的外部 IP 地址(显然,您需要自己进行设置)。然后它尝试连接到该 IP 地址。
由于未在原始 URL 中指定端口,它将查看协议(http在本例中)并选择该协议的默认端口号(80for http)。然后它连接到那个 IP 和那个端口。
请注意,您无法在 DNS 系统中指定不同的端口。如果自定义端口不在开始的 URL 中,则将使用默认值,句点。
现在,由于您的实际 Web 服务器在内部 IP 地址上运行在路由器后面,而外部 IP 地址属于您的路由器,因此您需要在路由器上设置端口转发。因此,当有人连接到externalIP:80路由器时,将创建另一个连接192.168.0.13:9177并在两个连接之间来回转发所有数据(吹毛求疵:实际上有点不同,但您可以这样想)。
只要您只有一个 Web 应用程序,这一切都很好。但是,如果您想拥有两个 Web 应用程序,并通过域来区分它们 - 您不能这样做。您请求的精确域仅在连接打开后才传输,但路由器需要在连接打开之前做出端口转发决定。它不知道传入请求是针对哪个域的,直到为时已晚。
在这种情况下,您需要反向代理。反向代理就像另一个 Web 应用程序,但它所做的只是接受 HTTP 请求,检查请求的域,根据该域打开另一个连接,然后在它们之间转发所有数据。它比仅仅盲目转发二进制数据(路由器为其端口转发所做的工作)要复杂一些,因为反向代理需要理解(并可能修改)HTTP 请求的内容。
反向代理可能安装在您的路由器上,或者安装在 Web 应用程序旁边的家庭服务器上,或者安装在单独的机器上。随你(由你决定。
哦,如果您的网络应用程序都使用相同的网络服务器(如 Apache Httpd 或 Nginx),那么它们自己支持“虚拟主机”,您根本不需要额外的反向代理。
PS 稍微超出范围,但也考虑设置 HTTPS。有了Let's Encrypt提供的免费(如啤酒)证书,这真是个好主意。您的反向代理也可以处理这部分,这意味着不需要对 Web 应用程序进行更改。
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |