在 RHEL 5.0 上的 Apache 中虚拟托管 tomcat web 应用程序

在 RHEL 5.0 上的 Apache 中虚拟托管 tomcat web 应用程序

我正在修复托管问题!我为我的组织开发了一个 Web 应用程序,允许共享、交互等。我想将其部署在 LAN 上。但...

我不希望最终用户输入:10.21.34.56:8080/webapp

相反,我希望他输入:http://www.webapp.com 并让内网上的本地DNS将其解析为相应的IP。

我可以做一点......我成功了:“www.webapp.com:8080”。

我不想输入 8080。

虽然我找到了一种方法来做到这一点。我并不完全满意。

浏览器默认将所有http请求发送到端口80。因此,我在服务器上使用iptables,并将请求重定向到端口8080。这似乎不值得发现。

所以,我听说 apache-tomcat 上的虚拟主机,他们说这是一个解决方案。

让我看到光!

答案1

据我理解,您是在请求将端口从端口 80 的 apache 重定向到运行在端口 8080 上的 tomcat 应用服务器,同时让 apache 在 http 标头中屏蔽端口,这样用户就不必在浏览 URL 中明确输入端口号。这需要在同一主机上运行的 Apache 和 tomcat 应用服务器之间建立应用程序桥接。假设您要在主机上托管 apache 虚拟主机,则需要进行配置dns以将应用程序CNAME指向主机。

您可以通过多种方式做到这一点。其中一种方法没有特定的顺序(但可能是相对容易设置)

  • mod_rewrite 和 mod_proxy Apache 模块。易于设置。只涉及httpd配置。仅充当代理重写端口 80 上发往虚拟主机到 tomcat http 服务器的 http 流量。到目前为止,从管理的角度来看,我发现这非常整洁和简单。我将让负责 tomcat 安装的开发人员/应用程序管理员负责更新 server.xml 文件。

    参考:http://tomcat.apache.org/tomcat-5.5-doc/proxy-howto.html 例子:

    <VirtualHost *:80>
    ServerName yourapp.yourdomain.com
    ServerAlias yourapp.*        
    ProxyRequests Off
    ProxyPreserveHost On     
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>     
    ProxyPass /webapp http://localhost:8080/webapp
    ProxyPassReverse /webapp http://localhost:8080/webapp    
    <Location /webapp>
      Order allow,deny
      Allow from all
    </Location>        
    </VirtualHost>
    
  • 使用 mod_jk2 模块通过 Apache 运行 JSP。中等硬度。涉及 httpd 配置中的复杂参数设置,如果同一虚拟主机需要执行其他脚本(例如 php/perl/cgi)而不是将流量传递到 Tomcat 服务器,则非常有用。这些链接中有一个很好的 HOWTO。

    参考:

    http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

    http://people.apache.org/~mturk/docs/article/ftwai.html

    http://www.mulesoft.com/apache-tomcat-mod-jk-connector-configuration

  • 通过Apache mod_proxy_ajp模块运行JSP:与上述方法类似,但为了保持一致性,该模块与tomcat使用ajp协议通信而不是http通信。

    参考:

    https://confluence.sakaiproject.org/display/~steve.swinsburg/Fronting+Tomcat+with+Apache+via+mod_proxy_ajp

  • 在主机的网络层解决这个问题。用于iptables将端口 80 上的所有传入流量重定向到默认绑定到端口 8080。涉及理解和管理 iptables 设置。一次性设置,但难以维护。如果您必须virtualhosts在同一台计算机上托管其他 Apache,则可能会出现问题。

例子:

iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT -d $(/bin/hostname) -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -d $(/bin/hostname) -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables-save

答案2

DNS 将主机名与 IP 地址相关联。它对特定端口一无所知。如果您未在 URL 中指定端口,则浏览器将在端口 80 上联系 DNS 返回的 IP 地址。使用 iptables 将端口 80 重新定向到端口 8080 是正确的解决方案。

相关内容