2012-07-11 85 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