我在局域网中的几台机器上运行了一些应用程序。所有应用程序都使用不同的端口。
为简单起见,假设我在一台服务器上有两个应用程序,apache 在 8080 上服务,tomcat 在 9292 上服务。我想要做的是给每个应用程序一个域,比如 tomcat.local 和 apache.local。
我查看了 bind,但 DNS a 似乎只想指向 ip 地址。我知道负载平衡器有这个能力,但我认为这可能有点过头了。有没有一个好的简单解决方案来设置它?
答案1
除了 DNS 条目之外,您还需要代理。
下面的示例展示了基于 apache 的用于 jenkins 的代理示例:
<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>
答案2
这里已有的建议的替代方案是在单个网络接口上设置多个 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 中如何实现的。
如果你跑域名系统在机器上(并将其用作网络上其他机器的名称服务器),然后您可以在内部网络中并将主机名/虚拟主机分配给唯一的 IP 地址(这允许您运行 apache10.0.0.1:80
和 tomcat10.0.0.1:80
并使用例如:apache.dev
并tomcat.dev
在本地引用服务)
这是我在工作中为我们的开发服务器使用的设置(一个盒子,gitlab和gitlabci和apache / php)
答案3
我知道负载平衡器具有这个容量,但我认为它可能有点过度。
您希望使用 Apache 反向代理和基于 Apache 名称的虚拟主机。顺便说一下,负载平衡器基本上使用反向模仿,但采用更精细的逻辑来帮助平衡系统流量。我将要概述的示例是一个相当简单的版本,适用于这种情况。
在本例中,我将重点介绍您通过端口访问的 Tomcat 服务,9292
因为看起来8080
Apache 端口是您为了尝试对此进行分段而设置的临时解决方案?这不是判断,只是基于您的示例的观察。无论如何,请继续阅读以了解我将如何解决此问题的详细信息。
首先,确保在 Apache 中启用proxy
和proxy_http
模块,如下所示。我使用 Ubuntu 12.04 作为示例:
sudo a2enmod proxy proxy_http
以下是如何tomcat.local
在 Apache 中设置虚拟主机的简单示例。请注意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 的流量都通过 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
专门引导该流量。