通过域路由到 LAN 中的多个应用程序。

通过域路由到 LAN 中的多个应用程序。

我在局域网中的几台机器上运行了一些应用程序。所有应用程序都使用不同的端口。

为简单起见,假设我在一台服务器上有两个应用程序,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.devtomcat.dev在本地引用服务)

这是我在工作中为我们的开发服务器使用的设置(一个盒子,gitlab和gitlabci和apache / php)

答案3

我知道负载平衡器具有这个容量,但我认为它可能有点过度。

您希望使用 Apache 反向代理和基于 Apache 名称的虚拟主机。顺便说一下,负载平衡器基本上使用反向模仿,但采用更精细的逻辑来帮助平衡系统流量。我将要概述的示例是一个相当简单的版本,适用于这种情况。

在本例中,我将重点介绍您通过端口访问的 Tomcat 服务,9292因为看起来8080Apache 端口是您为了尝试对此进行分段而设置的临时解决方案?这不是判断,只是基于您的示例的观察。无论如何,请继续阅读以了解我将如何解决此问题的详细信息。

首先,确保在 Apache 中启用proxyproxy_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:9292tomcat.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专门引导该流量。

相关内容