媒体服务器和 Web 服务器 —— 相同的 IP 地址,如何设置?

媒体服务器和 Web 服务器 —— 相同的 IP 地址,如何设置?

你好,我正在尝试建立一个用户可以上传图片的网站。我希望有一个单独的媒体服务器来托管图片,这样 Web 应用程序就可以指向这些图片,就像

mediaserver.mysite.com/test123.jpg

以及网络服务器

www.mysite.com

我想知道的是,如果媒体服务器和 Web 服务器都位于路由器后面,这如何工作?也就是说,只有一个端口 80 可用,因此无法通过 HTTP 寻址媒体服务器。

此外,用户应该能够调用mediaserver.mysite.com/test123.jpg并查看图像

理想情况下,用户应该调用

www.mysite.com/media/test123.jpg 

但最终,媒体是由另一台服务器提供的,该服务器可能位于与mysite.com

编辑:我使用 Apache 上的 Django 作为 Web 服务器,并使用 lighttpd 作为媒体。

谢谢!

答案1

这是经常会做的事情。我们有几十个网站都在同一个 IP 地址上运行,运行数百个网站的情况也并不罕见。您的 Web 服务器将检查请求的主机标头并进行适当的服务。

有两种方法可以实现这一点,它们都是一样的,只是针对不同的 Web 服务器。您没有指定使用哪一种,因此以下是最常见的三种:

IIS 5/6

右键单击您的网站并转到属性。在“IP 地址”(在“网站”选项卡上)旁边,单击高级。您将在其中看到端口 80 的条目,但没有主机头名称。删除此条目。

单击“添加”,在“TCP 端口”下保留 80(或对于 SSL 保留 443),在“主机头名称”下输入网站名称(例如 mediaserver.mysite.com - 尽管 example.com 是专门为此目的保留的名称,但不要介意)。单击“确定”,然后转到下一个屏幕,您就大功告成了。您现在可以通过 mediaserver.mysite.com 访问该网站(并且只能通过该网站,它不再单独侦听 IP)。

IIS 7

与 IIS 5/6 相同,只是您无需右键单击网站,只需选择它并在右侧菜单中选择“绑定”

阿帕奇

我很少配置 apache,所以我的记忆很模糊,但是你在 httpd.conf 中使用了基于名称的 VirtualHost 指令。从apache 示例文档

NameVirtualHost *

<VirtualHost *>
ServerName www.domain.tld
DocumentRoot /www/domain
</VirtualHost>

(如果您使用 Apache,我建议您阅读该文档页面的其余部分)。

答案2

当然,您只需在您的网络服务器上设置基于名称的虚拟主机,这样它就知道如何区分不同的名称(“基于名称的虚拟主机”加上 Google 中的操作系统/网络服务器应该可以为您提供大量帮助)。

答案3

您需要做的基本上就是将您的“路由器”设置为代理。它必须是一个功能齐全的 HTTP 服务器,可以接受传入的请求并检查它们是否指向www.mysite.commediaserver.mysite.com,并根据该请求将请求转交给 Web 服务器或媒体服务器。(它还可以进行更细粒度的检查,例如查找路径www.mysite.com/media并将其重写为mediaserver.mysite.com

如果你无法在路由器上实际运行 HTTP 代理,你至少应该能够配置路由器,将其接收到的所有 HTTP 流量(在端口 80 上)定向到其后面的一台特定机器,并且机器可以作为你的 HTTP 代理。

根据您的网站产生的负载类型,您可以让代理与 Web 服务器相同,或让代理与媒体服务器相同,这样您只需两台服务器即可,而不是三台。但同样,这取决于您在这些系统上施加了多大的负载(以及什么样的负载)。

答案4

仅供参考,如果你打算使用 Lighttpd,我建议你使用Nginx相反。它较新,记录较少,但速度更快、更轻量,使用 Nginx 的网站数量已经超过 Lighty。Nginx 还用于一些非常知名的网站,如 Wordpress、Github 和 Hulu。我使用 Nginx 作为前端,并为流量极高的网站提供静态文件,它运行良好!

相关内容