同时在端口 80 上运行 Apache Tomcat 和 Apache HTTPD

Apache Tomcat 和万维网

通常在运行应用程序服务器(例如Apache Tomcat)时,您直接在端口 80 上绑定连接器。这样访问您的 Web 应用程序的用户将能够通过调用您的域而不是调用您的域和特殊端口( http://yourdomain.com:8080)。如果没有选项在端口 80 上绑定 Tomcat 连接器(某些系统出于安全目的禁止此功能),还有其他方法可以实现此行为,例如在端口 80 上设置重定向到端口 8080Tomcat 的默认设置或任何其他) 使用IPTables任何其他端口重定向工具。这两个选项都是非常简单的过程,但是如果您也需要在您的机器上运行一个简单的 HTTP 服务器,这将是一个很大的问题。

Apache HTTP mod_proxy

为了解决这个问题,我们可以运行 Apache HTTPD 作为 Apache Tomcat 的前端代理,并根据一组规则将流量重定向到应用程序服务器。在本教程中,我们将使用mod_proxy,尽管还有许多其他选项可用。

本教程假设 Apache Tomcat 已经安装并配置了默认连接器设置(端口 8080),并且 Apache HTTP 也安装了默认侦听器设置(端口 80)。

对于本教程,我们将假设有 2 个不同的域(tomcatserver.com httpserver.com)指向同一个 IP 地址。用户希望在导航到一个域时访问应用程序服务器,而在导航到另一个域时访问 Web 服务器。

第一步是确保文件 httpd.conf 启用了 mod_proxy(默认情况下),所以如果不是,请取消注释以下行。

LoadModule proxy_module modules/mod_proxy.so

考虑到有 2 个域,我们需要使用 NameVirtualHost 指令,根据不同的域定义两个虚拟主机。

NameVirtualHost *:80

接下来,我们定义将流量重定向到 tomcat 的虚拟主机。如果 tomcat 也定义了一些虚拟主机,我们将为每个需要访问 tomcat 的域添加一个ServerAlias

<VirtualHost *:80>
    ServerAdmin root@localhost
    ServerName tomcatserver.com
    ServerAlias tomcatserver1.com
    ServerAlias tomcatserver2.com
    DefaultType text/html
    ProxyRequests off
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

DefaultType指令用于为未指定的响应设置默认类型。这可能发生在配置错误的 Web 应用程序中,并且是 Tomcat 默认执行的操作,并且在使用代理版本时可能会出现错误。

ProxyRequests是一种安全措施,将其设置为关闭将防止您的计算机被用作转发代理服务器。

ProxyPass会将远程服务器位置映射到本地路径。在这种情况下,对根目录的每个请求都将被重定向到 localhost 8080 端口。Apache HTTP 服务器将简单地将客户端的请求和响应镜像到远程服务器。

ProxyReverse将调整来自远程服务器的标头以匹配客户端期望的位置。

接下来,我们定义将直接从 Apache HTTP 提供页面的虚拟主机。

<VirtualHost *:80>    
    ServerAdmin root@localhost
    DocumentRoot /var/www/
    ServerName httpserver.com
    #Aliases
    ServerAlias httpserver1.com
    ...
</VirtualHost>

代理规则

在此示例中,我们假设有两个(或更多)不同的域,并且每个域将指向不同类型的服务器。mod_proxy 允许我们定义更高级的规则,以基于其他规则(例如上下文路径)代理内容。

<VirtualHost *:80>    
    ServerAdmin root@localhost
    DocumentRoot /var/www/
    ServerName httpserver.com
    #Aliases
    ServerAlias httpserver1.com
    ProxyPass /tomcat http://localhost:8080/
    ...
</VirtualHost>

使用此代码,所有流量都将由 Apache HTTP 提供服务,并且只有那些对“/tomcat”上下文路径的请求才会被代理到 Apache Tomcat。因此http://httpserver.com/index.php将由 Apache HTTP 提供服务,而http://httpserver.com/tomcat/index.do将由 Apache Tomcat 提供服务。

猜你喜欢

转载自blog.csdn.net/allway2/article/details/126261450
今日推荐