【问题标题】:Rewriting request before sending to mod_jk在发送到 mod_jk 之前重写请求
【发布时间】:2013-06-25 06:55:59
【问题描述】:

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

问题是来自httpd服务器的请求显示在Tomcat日志/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

【问题讨论】:

  • 您需要提供您正在使用的mod_jk配置。
  • 编辑帖子以提供配置信息

标签: apache tomcat


【解决方案1】:

你需要使用:

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

【讨论】:

  • 谢谢——这似乎可行,并且 Tomcat 正在接收请求。我现在遇到的问题是,以这种方式发送的请求会引发来自 GWT rpc 的序列化异常,但这超出了这个问题的范围。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2012-07-04
  • 2015-02-07
  • 2010-12-10
相关资源
最近更新 更多