我有一个networking服务器,实际上有一个端口80上的tomcat6服务器,可以从domain1.com访问。 我想在同一台机器上使用sinatra(ruby)服务器打开另一个网站,并能够从domain2.com到达它。
我该怎么做才能做到这一点? 我想先把tomcat6从80移到另外一个端口,然后在80上放置一些本地的东西,通过使用哪个域来请求来自不同的web服务器。
但我真的不知道如何..
提前致谢
是的,这与Apache的mod_proxy很容易做到。 正如你所build议的,我会把tomcat移动到8080端口或者其他东西,然后让Apache听80.同样,假设你设置sinatra来监听端口8888.然后在apache中,你做这样的事情:
<Virtualhost *:80> ServerName domain1.com # Proxy through to tomcat, listening on port 8080 <Location /> ProxyPass http://localhost:8080/ ProxyPassReverse http://localhost:8080/ Order allow,deny Allow from all </Location> </VirtualHost> <VirtualHost *:80> ServerName domain2.com # Proxy through to sintra, listening on port 8888 <Location /> ProxyPass http://localhost:8888/ ProxyPassReverse http://localhost:8888/ Order allow,deny Allow from all </Location> </VirtualHost>
(确保已经安装并启用了mod_proxy)
完成之后,您应该可以在浏览器中inputdomain1.com(假设您的服务器上已经有DNSlogging),并且Apache将代理通过Tomcat侦听8080.同样,domain2.com将被代理通过sinatra。
我相信这可以很容易地用nginx,haproxy或其他的东西来完成。 但是我没有这方面的经验,所以如果你想要朝这个方向发展的话,你必须到别处去看看。
你也可以使用iptables来获得类似于使用mod_proxy的结果(正如ErikA所显示的那样)。 基本上,您将数据包redirect到基于源IP的不同端口,如下所示:
sudo iptables -t nat -A PREROUTING -p tcp -s domain1.com --dport 80 -j REDIRECT --to-ports 8080 sudo iptables -t nat -A PREROUTING -p tcp -s domain2.com --dport 80 -j REDIRECT --to-ports 8081
这里tomcat监听端口8080,sinatra监听8081端口。
(你可能想使用Shorewall或其他防火墙pipe理工具,而不是直接操纵iptables )
只有一个进程通常可以拥有一个端口,所以你需要某种forms的HTTP代理来实际监听端口80,这个端口具有根据主机名(或者其他任何标准,如URLpath)向Tomcat或Sinatra转发请求的智能)。 虽然Apache mod_proxy可以做到这一点,但它有一些限制,Apache可以是重量级的。 我会build议一个像nginx或lighthttpd这样的专用代理。 内存方面的占用空间更小,如果您需要的话,在高负载下速度更快。
你在找什么叫做“虚拟主机”。 谷歌它,你会发现很多的HOWTO。