【问题标题】:Can a single Apache server handle both Tomcat and PHP?单个 Apache 服务器可以同时处理 Tomcat 和 PHP 吗?
【发布时间】:2012-07-07 00:38:21
【问题描述】:

我有一个要求,即有一个服务器,其中包含一个 Java 应用程序和一个 PHP 应用程序,在同一个 Apache 上运行。这可能吗?

这个问题可能很傻,但我对java要求或安装程序一无所知。

我可以做这样的事情,让 java 应用程序在一个端口上运行,而 PHP 应用程序在另一个端口上运行,两者都在同一个 Apache 上?

【问题讨论】:

  • 您可以使用 VirtualHosts 为所欲为,httpd.apache.org/docs/2.0/vhosts/examples.html#port,但您不希望它只使用一个端口吗?
  • 这是一个奇怪的要求。也许他们想要在同一台服务器上安装一个 Apache Tomcat(用于 Java 应用程序)和一个用于 PHP 的 Apache HTTP 服务器?这当然是可行的。
  • @Gustav Carlson - 你说对了

标签: java php apache


【解决方案1】:

是的,您可以这样做。本质上,您必须在一个端口上运行 Apache (+ PHP) 服务器,而在另一个端口上运行 Tomcat 服务器。

  • 您可以向外界公开第二个端口,并让您的 URL 使用端口 80 用于 Apache / PHP 或(例如)8080 用于 Java 服务器。这很简单,但您可能会发现上游防火墙会阻止远程 Web 浏览器连接到 80 以外的任何端口。

  • 您可以将 Apache 服务器配置为 Java 服务器的反向代理。例如,Apache 服务器可能会识别出http://site.com/javaapp/foo.html 用于 Java 服务器,并将对该 URL 的请求转发到 http://localhost:8080/javaapp/foo.html

Apache 文档有一整章是关于使用 mod_proxy 配置正向和反向代理的。

【讨论】:

    【解决方案2】:

    是的。

    Apache HTTPd 可以使用 ModProxy 或 ModAJP 委托给 Apache Tomcat,并且可以根据请求的域、路径或文件扩展名进行配置。您的 PHP 的 Apache HTTPd 配置将保持不变。

    您需要将 Apache Tomcat 配置为侦听端口 80,然后配置您选择的 Apache HTTPd 代理解决方案以在不同的端口上与 Tomcat 通信。

    这里是更多信息的起点:Apache + Tomcat: Using mod_proxy instead of AJP

    【讨论】:

      【解决方案3】:

      一个单一的 apache 服务器可以同时处理 tomcat 和 php 吗?

      是的,您需要安装 apache 和 tomcat,但您可以配置 apache 以使用 AJP 协议将所有 JSP 请求重定向(对用户透明)到 tomcat。

      在此处查看更多信息: http://www.datadisk.co.uk/html_docs/java_app/tomcat6/tomcat6_apache_server.htm

      【讨论】:

        【解决方案4】:

        这可以使用 Apache 反向代理,

        我配置了一个 Apache 虚拟主机,它服务于一个 PHP 网站(Drupal)和一个 java(tomcat,用于业务逻辑),它们使用具有 2 个位置的反向代理存储在同一服务器中,这种配置的优点是它不会公开 Tomcat 在 URL 上使用的端口,出于安全原因,这对我来说是强制性的。

        我是这样实现的:

        <VirtualHost *:80>
        ProxyPreserveHost       On
        DocumentRoot            "/srv/www/htdocs/"
        ErrorLog                /var/log/httpd/app_error_log.log
        CustomLog               /var/log/httpd/app_log.log combined
        ServerName              myapp.com
        
        #Drupal PHP Content, stored at / as the main front end website.
        <Location />
            ProxyPass http://localhost/
            ProxyPassReverse http://localhost
            Order allow,deny
            Allow from all
        </Location>
        
        #Tomcat/java content, secondary site used to process payments and business logic:
        <Location /javaApp>
            ProxyPass http://localhost:8080/javaApp/
            ProxyPassReverse http://localhost:8080/javaApp/
            Order allow,deny
            Allow from all
        </Location>
        
        </VirtualHost>
        

        重启 Apache:

        service httpd restart;
        

        测试您的反向代理: PHP/Drupal(在我的情况下,我使用的是 drupal,但可以是任何 PHP 代码):

        http://yourserverip/ or http://localhost/
        

        Java:

        http://yourserverip/javaApp or http://localhost/javaApp
        

        我希望有人能发现这很有用。 我很难弄清楚这一点。 :)

        问候。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-26
          • 1970-01-01
          • 2019-01-12
          • 2017-04-19
          • 2010-10-22
          • 2012-05-08
          • 1970-01-01
          • 2015-07-29
          相关资源
          最近更新 更多