Tomcat 仅处理 JSP - Apache 代理未按预期工作

Tomcat 仅处理 JSP - Apache 代理未按预期工作

我收到了一些包含 .jsp 文件的 PHP 项目的源代码。我可以在办公室 Mac 上安装的 XAMPP 上按原样运行它,但我很难在家里的 Ubuntu 上实现同样的功能。

我需要的是能够将 .jsp 文件放入我的 Apache 服务器根目录 (/var/www/html/),并让 Apache 与 Tomcat 建立必要的连接以解析 .jsp 文件,然后让 Apache 处理其他所有事情。

我不想将我的.jsp 文件或其他任何东西放在 Tomcat 服务器根目录中,我只是希望 Tomcat 解析我的 Apache 服务器根目录中的 .jsp 文件。

我已阅读了 Stack Exchange 上的几篇文章和问题,并得到了以下结果:(localhost/something/something.jsp位于/var/www/html/something/something.jsp)由 Apache 提供服务,并且 Java 代码未经解析就提供给客户端,而导航到localhost/something/something.php(位于 something.jsp 旁边)时会显示 Tomcat 的默认“它有效!”登录页面。这不是我想要的。

这是我的已设置代理的 000-default.conf 文件:

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    #ServerName www.example.com

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ProxyRequests off
    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass *.jsp ajp://127.0.0.1:8009/
    ProxyPassReverse *.jsp ajp://127.0.0.1:8009/

    <Directory "/var/www/html">
        AllowOverride All
    </Directory>

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

我怎样才能达到期望的结果?

答案1

ProxyPass不能这样使用。它更像是一个Location,强制某个路径(及其下的所有内容)必须定向到远程服务器。扩展名应与以下项匹配ProxyPassMatch

ProxyPassMatch "^/(.*\.jsp)$" "ajp://127.0.0.1:8009/$1"

另外,你不需要proxy_http_moduleproxy_ajp_module而是

编辑,您需要一个 tomcat 监听 8009 端口,并将 jsp 放在其根目录下(可以与您的 apache 根目录相同),以便“解析”jsp,apache 无法单独使用应用服务器的引擎,tomcat 也无法为不在其下的页面提供服务。

相关内容