在发送到mod_jk之前重写请求

时间:2013-06-25 06:56:00

标签: apache tomcat

我在Ubuntu 12.10上运行Tomcat并安装了一个webapp。使用Tomcat(localhost:8080 / webappname)访问它时工作正常。使用此方法对servlet的请求在Tomcat访问日志中显示为/ webappname / servlet / servletname。但是,我更愿意使用apache httpd来托管静态http文件。因此,我安装并配置了mod_jk。

问题是来自httpd服务器的请求显示在Tomcat log / servlet / servletname中,缺少前面的webapp名称,因此返回404.

我尝试添加:

RewriteEngine On
RewriteRule ^/servlet/(.*)& /webappname/servlet/$1 [PT] 

到apache的虚拟主机配置,但这不起作用。我不知道是否将重写传递给mod_jk。

解决此问题的最佳方法是什么?是否应该在httpd服务器中重写请求,或者是否有办法告诉Tomcat将请求转发给特定的webapp?

编辑:

这些行位于虚拟主机配置中:

JkMount /servlet/ ajp13
JkMount /servlet/* ajp13

这是mod_jk的配置文件:

    <IfModule jk_module>
JkWorkersFile /etc/apache2/jk_workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
JkShmFile /var/log/apache2/jk-runtime-status
JkWatchdogInterval 60
<Location /jk-status>
    # Inside Location we can omit the URL in JkMount
    JkMount jk-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>
<Location /jk-manager>
    # Inside Location we can omit the URL in JkMount
    JkMount jk-manager
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>

这是工人属性文件:

worker.list=ajp13
worker.ajp13.type=ajp13
worker.ajp13.host=localhost
worker.ajp13.port=8009
worker.ajp13.lbfactor=50
worker.ajp13.cachesize=10
worker.ajp13.cache_timeout=600
worker.ajp13.socket_keepalive=1
worker.ajp13.socket_timeout=300
max_packet_size=65536

1 个答案:

答案 0 :(得分:2)

您需要使用:

JkMount /webappname/servlet/ ajp13
JkMount /webappname/servlet/* ajp13