jsp - JSP在https后面显示源代码

原文 标签 jsp tomcat apache2

这是一个奇怪的问题。我有一个网站无法正确呈现其代码。它是Tomcat 5.0.27-2服务器(我知道...很旧)和Apache 2.0.46-77服务器。我们目前无法升级它们,因为这是我们目前所允许的更大变化。

无论如何,会发生以下情况:

Go to https://mysite.com/mysite and the JSP renders correctly
Go to https://www.mysite.com/mysite and the RAW JSP is displayed, no rendering
Go to https://1.2.3.4/mysite and you get the TomCat welcome page.


必须使用代码块,因为我无法发布无效的IP网址。

我确定这是一个配置设置,但我不知道它可能是什么。有一个问题,我们发布的SSL是针对mysite.com的,而不是针对www.mysite.com的,但是我不认为这是造成它的原因。如果我能将所有流量(www.mysite.com和IP)重定向到mysite.com,我会很高兴。

我看了看httpd.conf文件。我目前在VirtualHosts中具有以下内容:

<VirtualHost 1.2.3.4:80>
 ServerName mysite.com
 DocumentRoot /mysite_root/ROOT
 ServerAdmin me@me.com
<Location "/*.jsp">
  JkUriSet worker ajp13:localhost:8009
</Location>
<Location "/*/*.jsp">
  JkUriSet worker ajp13:localhost:8009
</Location>
<Location "/*/*/*/*/*/*.jsp">
  JkUriSet worker ajp13:localhost:8009
</Location>
  RewriteEngine on
  RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
  RewriteRule .* - [F]
</VirtualHost>


我已更新文件,如下所示:

httpd.conf

<VirtualHost 1.2.3.4:80>
 ServerName mysite.com
 DocumentRoot /mysite_root/ROOT
 ServerAdmin me@me.com
 JkMount /*.jsp worker1
 JkMount /servlet/* worker1
 RewriteCond %{HTTP_HOST} ^www.mysite.com [nocase]
 RewriteRule ^(.*)         https://www.mysite.com/$1 [last,redirect=301]
</VirtualHost>    


ssl.conf

<VirtualHost 1.2.3.4:443>
 ServerName mysite.com
 DocumentRoot /mysite_root/ROOT
 ServerAdmin me@me.com
 JkMount /*.jsp worker1
 JkMount /servlet/* worker1
 RewriteCond %{HTTP_HOST} ^www.mysite.com [nocase]
 RewriteRule ^(.*)         https://www.mysite.com/$1 [last,redirect=301]
</VirtualHost>    


mod_jk.conf

LoadModule  jk_module   modules/mod_jk.so
<IfModule jk_module>
  JkWorkersFile /etc/httpd/conf/workers.properties
  JkShmFile     /var/log/httpd/mod_jk.shm
  JkLogFile     /var/log/httpd/mod_jk.log
  JkLogLevel    info
  JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
  JkWatchdogInterval 60  
</IfModule>


worker.properties

worker.list=worker1

worker.worker1.type=ajp13
worker.worker1.host=localhost
work.worker1.port=8009


当我重新启动httpd时,没有错误,并且它看到java_home和catalina_home

最佳答案

您需要确保JkMount指令在<VirtualHost>中所有的httpd.conf部分中重复。如果您在其中一种情况下没有JkMount,则Apache httpd将代替请求。

您的问题还表明您正在Alias将URI抄录到Webapp的docBase。不建议使用此技术,因为它可以允许远程客户端请求诸如/META-INF/context.xml/WEB-INF/web.xml之类的内容,并获取有关您的Web应用程序的各种重要信息(数据库凭据等)。

而且,Tomcat 5.0已经过时,您真的需要使用该程序。

相关文章:

java - 如何从其他方法访问列表?

jsp - JSP和Tomcat中的UTF-8编码

java - Tomcat5.5中的上下文信息

mysql - Tomcat 7和Idea ide的JDBC问题

javascript - 将数组从JSP作为参数传递给JavaScript函数

tomcat - 为什么JDBC驱动程序调用在Tomcat中有效但在JBOSS中无效

java - 更新后,如何强制tomcat Web应用程序重新加载信任库

php - 在Apache中授予PHP写入权限

debugging - 如何在Apache2服务器上启用日志级别调试

php - Apache2的,并行线程。致命错误。 pthreads不支持apache2handler SAPI