我有几个应用程序在局域网中的几个盒子上运行。 所有应用程序使用不同的端口。
为了简单起见,假设我在一台服务器上有两个应用程序,Apache服务于8080,Tomcat服务于9292.我正在尝试的是为每个应用程序提供一个域,例如tomcat.local和apache.local。
我看着绑定,但DNS似乎只想指向IP地址。 我知道负载平衡器有能力,但我认为这可能是矫枉过正。 有没有一个很好的简单的解决scheme来设置?
除了dns条目之外,你还需要一些代理。
下面的例子展示了基于jenkins使用的apache的代理示例:
<VirtualHost *:80> ServerName jenkins.localdomain ProxyRequests Off ProxyVia Off # ProxyPreserveHost On ErrorLog /var/log/httpd/jenkins_error.log CustomLog /var/log/httpd/jenkins_access.log combined <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://192.168.1.100:8081/ ProxyPassReverse / http://192.168.1.100:8081/ </VirtualHost>
此处提出的build议的替代方法是在单个networking接口上设置多个IP地址。
例如,现在如果你有10.0.0.1分配给eth0 。 您可以在不添加额外硬件的情况下获得以下设置:
eth0:0 10.0.0.1 eth0:1 10.0.0.2 eth0:2 10.0.0.3 eth0:n 10.0.0.n
不知道你的操作系统,但这里是如何在Debian中完成的 。
如果您也在机器上运行dnsmasq (并将其用作networking上其他机器的名称服务器),那么您可以在内部networking中将主机名/虚拟主机分配给一个唯一的IP地址(这样可以让Apache运行在10.0.0.1:80和10.0.0.1:80上的tomcat,并使用例如: apache.dev和tomcat.dev在本地引用服务)
这是我在我们的开发服务器(一个框,gitlab和gitlabci和apache / php)工作中使用的设置,
我知道负载平衡器有能力,但我认为这可能是矫枉过正。
您希望使用Apache反向代理与基于Apache名称的虚拟主机。 而为了logging,负载平衡器基本上使用反向模仿,但更多的巧妙逻辑有助于平衡系统stream量。 我要概述的例子是一个相当简单的版本,适用于这种情况。
我将关注这个例子中你通过端口9292的Tomcat服务,因为Apache 8080的端口看起来就像是你试图分割的端口。 这不是一个判断,而只是一个基于你的例子的观察。 无可否认,请仔细阅读我将如何解决这个问题。
首先,确保在Apache中启用proxy和proxy_http模块。 我以Ubuntu 12.04为例:
sudo a2enmod proxy proxy_http
下面是一个如何在Apache中设置tomcat.local虚拟主机的简单例子。 请注意Proxy*相关的项目; 这是使其工作的关键:
<VirtualHost *:80> DocumentRoot /var/www/tomcat.local/site/ ServerName tomcat.local ServerAlias tomcat.local ErrorLog /var/log/apache2/tomcat.local.error.log CustomLog /var/log/apache2/tomcat.local.access.log combined # Settings for Confluence <IfModule mod_proxy.c> # Proxy specific settings ProxyRequests Off ProxyPreserveHost On <Proxy *> AddDefaultCharset off Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:9292/ ProxyPassReverse / http://localhost:9292/ </IfModule> </VirtualHost>
现在重启Apache,如下所示:
sudo service apache2 restart
所以在这种情况下,不要去localhost:9292你可以去tomcat.local ,与虚拟主机设置相关的代理设置将localhost:9292到tomcat.local 。
通常,当我做这样的事情时,我想确保所有通往Tomcat的stream量都通过Apache,所以我打开Tomcat服务器XML文件,如下所示:
sudo nano /etc/tomcat6/server.xml
查找以下设置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />
然后添加address="127.0.0.1限制连接到localhost环境,如下所示:
<Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />
现在重新启动Tomcat:
sudo service tomcat6 restart
在这一点上,Tomcat将被限制在localhost但基于名称的虚拟主机和反向分配的Apache设置将通过tomcat.local专门pipe理该stream量。