![Tomcat 仅处理 JSP - Apache 代理未按预期工作](https://linux22.com/image/692295/Tomcat%20%E4%BB%85%E5%A4%84%E7%90%86%20JSP%20-%20Apache%20%E4%BB%A3%E7%90%86%E6%9C%AA%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C.png)
我收到了一些包含 .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_module
, proxy_ajp_module
而是
编辑,您需要一个 tomcat 监听 8009 端口,并将 jsp 放在其根目录下(可以与您的 apache 根目录相同),以便“解析”jsp,apache 无法单独使用应用服务器的引擎,tomcat 也无法为不在其下的页面提供服务。