2012-07-11 142 views
1

这是一个奇怪的问题。我有一个网站没有正确渲染它的代码。它是一个Tomcat 5.0.27-2服务器(我知道...旧)和Apache 2.0.46-77服务器。目前我们无法升级它们,因为这是一个比我们现在所允许的更大的变化。JSP在https上显示源代码

总之,这里的会发生什么:

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 [email protected] 
<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 [email protected] 
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 [email protected] 
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> 

workers.properties

worker.list=worker1 

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

当我重新启动httpd的,没有错误,它看到了JAVA_HOME和CATALINA_HOME

+0

[Biolerplate](https://github.com/h5bp/html5-boilerplate/blob/master/.htaccess#L361)很好地显示了如何进行URL重写。 – Andrew 2012-07-11 15:42:38

回答

1

你需要确保你的JkMount指令在所有<VirtualHost>的复制部分,你在httpd.conf。如果其中一个案例没有JkMount,则Apache httpd将代替提供该请求。

你的问题还表明你是Alias给你的webapp的docBase一个URI。这不是推荐的技术,因为它可以允许远程客户端请求诸如/META-INF/context.xml/WEB-INF/web.xml之类的东西,并获取关于您的webapp(数据库凭证等)的各种有用信息。

此外,Tomcat 5.0是如此痛苦地过时,你真的需要得到的程序。

+0

我没有在httpd.conf文件中看到任何别名。但是我确实看到它们列在server.xml文件的服务部分中的几个主机下面。你在说什么?正如你上面看到的,没有JkMounts,只是地点和JkUriSet命令。 – SpaceCowboy74 2012-07-11 20:01:12

+0

你喜欢用'JkURISet'吗?无论如何,您必须在所有'VirtualHost'节中复制这些指令,否则Apache httpd不知道将请求代理到Tomcat。如果您正在获取原始JSP代码,那么Tomcat几乎肯定不会收到请求 - 它由httpd提供服务。 – 2012-07-12 00:28:55

+0

实际上,我尝试在我的httpd.conf中使用JkMount /*.jsp ajp13作为命令。我们得到了一个关于它是无效值的错误。 (我希望我只能升级该死的服务器)。我也尝试在https上使用RewriteCondition,host_name是www.mysite.com,并重写规则以指向https://mysite.com/$1。我把它放在上面现有的条件和规则之后。我甚至在虚拟主机之外尝试过它。仍然将原始JSP显示为文本(根本不显示任何html)。 – SpaceCowboy74 2012-07-13 19:11:19