1

私を悩ませています。

したがって、私は JSP を使用しており、実装されたフィルターと拡張された HttpServlet 内にそれぞれこれらのメソッド (単純な例) があります。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/foo");
}

 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    response.sendRedirect(request.getContextPath() + "/foo");
}

ではlocalhost:8080/app、Filter と HttpServlet の両方が正しくリダイレ​​クトしlocalhost:8080/app/fooます。

しかし、次のように Apache のプロキシwww.mysite.com/appの下に を隠している at では、tomcatserver:8080/app

RedirectPermanent /app /app/
ProxyPass /app/ http://tomcatserver:8080/app/
ProxyPassReverse /app/ http://tomcatserver:8080/app/

Filter は私を OK にリダイレクトしますwww.mysite.com/app/fooが、HttpServlet は次のいずれかを行います。

  1. (同じドメインから) Tomcatのサーバーアドレスを明らかにし、tomcatserver:8080/app/fooまたはにリダイレクトします
  2. (ドメイン外から)ロードがスタックするだけです。

それで... 何が原因ですか?

PS: HttpServlet からrequest.getContextPath()と の"/"部分を削除すると問題が解決することはわかっていますが、私はそれを求めているわけではありません。

4

1 に答える 1

3

Tomcat はリバース プロキシのホスト名を認識していないためです。Tomcat が認識するホスト ヘッダーは、Tomcat 自身のものです。したがって、Tomcat がリダイレクトなどの絶対 URL を生成するときに使用するホストです。

を使用してこれを変更できます

ProxyPreserveHost On

あなたのhttpd設定で。

于 2012-04-09T13:20:45.940 に答える