2017-10-07 25 views
0

を使用してリバースプロキシ、私は例えば、(エンドポイントの後にパスを持つ)外部URLへのルートの特定のエンドポイントにしたい:TomcatのWebアプリケーションは、私はTomcatの中に簡単なWebアプリケーションを持っているのRewriteRule

localhost/myapp/api/hello -> http://my-api-domain.com/hello 

私は、文脈に追加しましたアプリ のMETA-INFフォルダ内の.xmlそして、次の構文でWEB-INFフォルダにrewrite.configファイルを追加しました:

RewriteRule ^/api/.*$ http://my-api-domain.com/$1 [L] 
RewriteRule ^/.*$ hello.html [L] 

それは正しくhello.htmlへのルートすべてのエンドポイントを、私はナビゲートto/api /それは次のエラーを返します:

java.lang.IndexOutOfBoundsException: No group 1 
    java.util.regex.Matcher.group(Matcher.java:538) 
    org.apache.catalina.valves.rewrite.Substitution$RewriteRuleBackReferenceElement.evaluate(Substitution.java:43) 
    org.apache.catalina.valves.rewrite.Substitution.evaluate(Substitution.java:267) 
    org.apache.catalina.valves.rewrite.RewriteRule.evaluate(RewriteRule.java:135) 
    org.apache.catalina.valves.rewrite.RewriteValve.invoke(RewriteValve.java:351) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) 
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) 
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1441) 
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 

書き換えの設定で '$ 1' はせずに、

RewriteRule ^/api/.*$ http://my-api-domain.com/ [L] 

a.gそれは404を返します。

/myapphttp://my-api-domain.com/ 

外部URLへのアプリのコンテキストと前方の要求を終了するにはどうすればよいですか?そして私はそれをどのように透明にするのですか?私は書き換えにPフラグの代わりにLを追加しようとした

(APIリクエストが、同様のMyAppから来ているように見えるであろう)、それは以下で失敗:

Invalid flag in: RewriteRule ^/api/.*$ http://my-api-domain.com/ [P] flag: P 

Tomcatバージョン:8.5。 12 、Javaバージョン:1.8.0_144

ありがとうございました!

答えて

0

最終的に、要件(リバースプロキシ、設定が可能)に答えるWebアプリケーションが見つかりました。

j2ep

0

できません。 Tomcatの書き換えバルブは、逆プロキシの形式をサポートしていません。また、他のコンポーネントから外れることもありません。

関連する問題