一个公共IP背后的多个Web服务器


2

长时间读者第一次海报(他)。所以这就是我的困境。我在家里为一些朋友托管3个网站,没什么大不了的,都是wordpress网站。在VMWare Workstation中运行它们。有大量的ram备用,所有这些混乱,所以不用担心资源方面。当我正在构建站点#2时,我意识到,'CRAP!...我如何通过路由器路由这些路由器?“现在,在你们有些人说vhost之前,我正在分离不同虚拟机上的站点。 1/3不是一个非常重要的网站,但如果发生某些事情,我宁愿不会同时全部下台。所以......

我有一个通用的Linksys路由器(带有残酷的新智能Wifi)。男人我需要将固件更改为好东西,但那是另一天。所以一个公共IP,3个VM都具有独特的内部IP,即192..1 / 2/3。路由器不允许端口使用相同的端口转发到多个IP(80)。

如果要做很多事情,我会咬紧牙关并将它们移动到同一个虚拟机并对不同的网站进行虚拟操作,但我的想法是使用另一个虚拟机。一个虚拟路由器。我可以想到一些路由器/防火墙虚拟机就像pfSense,m0n0wall,但我只是在寻找一些简单易用的东西,但我认为它需要像vhost那样稍微采取行动才能进入端口80来自路由器的请求,然后通过使用主机头(我认为)将流量分散到持有Web服务器的3个VM。

任何人都有建议,更好的方法等?事先得到很多赞赏,并且将它们全部置于一个VM屋顶下即可立即解决这个问题,在我看来,VM的分离胜过它。

但是对思想非常开放。干杯。


1
如果您非常关心正常运行时间,为什么不租用vps并在那里托管服务器?
tombull89 2013年

应该只是谈论虚拟路由。

1
问题是,是每台服务器托管它自己的网站,还是每台服务器都拥有这三个网站的副本?你想要一个负载均衡器,但在家里使用一个?我不知道从哪里开始。
tombull89 2013年

每个人都有自己的网站。虽然我只是觉得虚拟路由器'可能'可以做到这一点。就像你的答案,只是不知道从哪里开始。开始觉得分开它们太麻烦了。

5
使用mod_proxy设置一个apache服务器,并将每个站点代理到自己的服务器。路由器只需要将端口转发到那个apache服务器。
Jenny D

Answers:


3

再设置一个vm作为代理,使用域名将流量引导到适当的vm。


您可以将nginx设置为您拥有的其中一个VM的代理,并将其用作WebProxy。这是Nginx HTTP代理模块的文档:nginx.org/en/docs/http/ngx_http_proxy_module.html另一个HOWTO:cyberciti.biz/tips/using-nginx-as-reverse-proxy.html

1
虽然这可能是最好的方法。除非你给出一些关于如何应用这个想法和链接到文档/ howtos的指示,否则这不是一个答案。
mveroone 2013年

2

我尝试了各种解决方案,并且我的成功是使用Apache2。它配备虚拟主机功能。

您将需要对Apache2进行一些“连接”,但是,我将包括我的conf作为指南。这是如何工作的:apache2在“基于名称的域”功能上运行,它可以在一个公共IP上运行尽可能多的站点。[我是开发人员,解释了为什么这么多网站]。

   $ sudo apt-get install -y apache2 apache2-dev apache2-threaded-dev

通过在conf的末尾添加这三行来连接你的apache2.conf

   include httpd.conf
   <VirtualHost *>
   </VirtualHost>

使用本指南配置httpd.conf; 根据您的情况进行调整。默认情况下,作为新安装,您将看不到httpd.conf,但如果发现位于/ etc / apache2目录中的httpd.conf,Apache2将会响应。

    $ sudo touch /etc/apache2/httpd.conf

并将其添加到httpd.conf。重点是离开:80不受影响。当你看到 '##编辑这个* '; 在那里你可以根据自己的喜好进行编辑,同时保持其他人不受影响。

   <Directory "/var/www">  ***## EDIT THIS***
      Options Indexes FollowSymLinks
      AllowOverride All
   </Directory>

    <location /cgi-bin>
    AddHandler cgi-script .cgi .pl
    Options -Indexes +FollowSymlinks +ExecCGI
    </location>


  <VirtualHost *:80>
    ServerName example.ca  ***## EDIT THIS***
    ServerAlias www.example.ca ***## EDIT THIS***
    DocumentRoot /var/www/example_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

  <VirtualHost *:80>
    ServerName sample.ca ***## EDIT THIS***
    ServerAlias www.sample.ca ***## EDIT THIS***
    DocumentRoot /var/www/sample_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

然后...

   $ sudo service apache2 restart

瞧!祝好运!

编辑:请记住 - 在设置网站并测试在本地网络上运行后,您需要使用DNS服务提供商(您注册这些域的地方)更新DNS并更新您的IP地址(您托管计算机的位置)这些多站点)。


只是为了确认,通过这种方法,他将在一个虚拟机上托管所有网站,对吗?在资源分配方面,并没有什么大不了的,实际上可能更好。
MDMoore313 2013年

确认,MDMoore313。原因:Apache2已经拥有虚拟主机技术,可以在单台机器上运行多个站点。
法伦2013年

1

路由器不允许端口使用相同的端口转发到多个IP(80)。

顺便说一句,标准TCP / IP是不可能的。您需要一个程序,即代理,接受端口上的请求,查看请求,然后相应地分流请求。


Apache和其他Web服务器具有“反向代理”功能,可用于“分割”您的传入流量。反向代理告诉Apache,某个Web路径的请求,即“yourdomain / directory1”应该被抛给另一个Web服务器,并且该Web服务器的响应被抛回原始客户端。

但是,请注意,如果您在此Web服务器(PHP等)上运行应用程序,则可能需要更改设置,因为它们的外部URL将不同。您可能必须告诉PHP应用程序它位于“yourdomain / directory1”而不是“yourdomain”,以便它可以正确生成链接。有可能告诉Apache在将其返回给客户端之前重写来自后端服务器的流量,但这很困难,如果可能的话你想避免它。使用Javascript生成链接的应用程序可能特别成问题,因此并非所有Web应用程序都可以轻松“反向代理”。

因此,在第四个“前端”VM上安装Apache - 将传入的TCP 80转发到此VM。您还需要确保此VM可以访问“虚拟网络”上的其他VM。然后,在“前端”VM上,您可以为每个网站设置单独的反向代理。

以下是使用ProxyPassProxyPassReverse指令的相关Apache配置详细信息。

您还可以获得精心设计并实现缓存,这将有助于提高性能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.