在单独的服务器上托pipe多个域,但只有一个公共IP地址

有没有办法在同一个公共IP地址上托pipe多个不同域名的网站,当用户input时,比如example1.com去到我的私人networking(192.168.1.20)上的一个服务器,example2.com去192.168 .1.21? 我有一台虚拟机主机,想要尝试一些交钥匙的Linux解决scheme,如果在决定使用这些虚拟主机时可以公开访问这些网站,那将是非常棒的。 我在这里遇到的许多解决scheme涉及使用redirect,但我还没有find一个体面的工作方式的说明。 用户是否会在浏览器中看到redirect? 它慢吗? 我猜我必须有一个“主”服务器运行Apache将监听端口80,然后redirect到我的其他服务器?

每次我需要这样做时,我都会回到HAProxy,这是另一个反向代理软件包,允许您在单个(或多个)公共IP之后托pipe多重服务。

在这个例子中,我将在公共地址的机器上安装HAproxy。

这可以从APT-GET或YUM完成,具体取决于你的select。 一旦安装了看看configuration文件(在Ubuntu中它在/etc/haproxy/haproxy.cfg)

HAProxy使用FRONTENDS和BACKENDS,前端绑定到IP:PORT,然后在其中指定服务器(一个或多个)的后端。

这里是我的configuration在我的单个家庭IP后面运行多个Web服务应用程序的例子。 在我的情况下,即使在我的后端使用同一个IP上的多个端口,在您的示例中,您将希望在端口80上使用不同的IP。

#GLOBAL CONFIG global maxconn 1000 daemon user haproxy group haproxy nbproc 1 pidfile /var/run/haproxy.pid stats socket /var/run/haproxy.cmd mode 777 level admin #ASSUMED DEFAULTS defaults log global mode http option httplog option dontlognull retries 3 maxconn 1000 contimeout 5000 clitimeout 50000 srvtimeout 50000 #STATS PAGE listen stats 192.168.10.253:9000 mode http stats enable stats auth username:password stats uri /proxy_stats stats realm PAGE TITLE ####SABNZBD#### backend sabnzbd server sabnzbd 192.168.10.253:8080 weight 1 maxconn 1000 check inter 10000 option redispatch option httpclose option forwardfor balance roundrobin timeout server 120000 ####SICKBEARD#### backend sickbeard server sickbeard 192.168.10.253:8081 weight 1 maxconn 1000 check inter 10000 option redispatch option httpclose option forwardfor balance roundrobin timeout server 120000 ####COUCHPOTATO#### backend router server router 192.168.10.254:80 weight 1 maxconn 1000 check inter 10000 option redispatch option httpclose option forwardfor balance roundrobin timeout server 120000 ####TROLL#### backend troll # server troll www.meatspin.com:80 weight 1 maxconn 1000 check inter 10000 server troll www.google.com:80 weight 1 maxconn 1000 check inter 10000 option redispatch option httpclose option forwardfor balance roundrobin timeout server 120000 #NAS FrontEnd frontend nas bind PUBLIC_IP:80 reqadd X-Forwarded-Proto:\ http default_backend troll acl req_couchpotato hdr_beg(host) -i film. acl req_sickbeard hdr_beg(host) -i tv. acl req_router hdr_beg(host) -i home. acl req_sabnzbd hdr_beg(host) -i warez. use_backend couchpotato if req_couchpotato use_backend sickbeard if req_sickbeard use_backend sabnzbd if req_sabnzbd use_backend router if req_router 

有了这个和PUBLIC_IPconfiguration在前端,myserver侦听端口80,查看HTTP标头发送请求,如果它看到一个请求film.mypersonaldomain.com它使用沙发后端,如果它看到tv.mypersonaldomain它使用病态的后端。

请注意我在testing时使用的“troll”设置,如果您在未指定匹配的URL的情况下访问我的公共IP,则默认后端是将您的请求发送到meatspin.com(如果您有任何价值,请不要前往此地址眼睛),我用这个例子replace了google.com。

HAProxy可以做更多的事情,但这应该给你一个基本的好主意。 HAPRoxy的文档非常深入,但也非常全面。

http://haproxy.1wt.eu/#docs

Ĵ

您需要在服务器和公共networking之间安装反向代理。 nginx是一个stream行的select,有很多例子,一旦你知道要search什么( http://www.howtoforge.com/how-to-set-up-nginx-as-a-reverse-proxy- for-apache2-on-ubuntu-12.04是第一个search“nginx反向代理”的人之一)。

对于由代理内部的不同服务器提供服务的域/目录,您可以像代理计算机将要从不同的本地位置提供服务一样来定义每个虚拟主机或目录,而是将每个虚拟主机或目录定义为使用相关代理选项。

nginx不是唯一的select:许多web服务器(包括具有正确模块的apache)都可以这样操作。 nginx是一个stream行的select,因为它快速和轻便,但如果你还需要其他function,那么货比三家,作出最好的select。

如果您在任何站点上使用SSL,则需要使用相关证书来configuration代理,显然,如果您需要多个SSL站点通过身份validation,则需要configurationWeb服务器以处理SNI。 为了提高效率, 如果它们之间的networking是可信的,那么代理通常通过非ssl http与内部服务器通话。