■ はじめに
* 以下「環境」下で、「構成」のように、ロードバランサ(ELB)が入口になって SSL通信のみで、http(80)は受け入れない状態で、JAX-WS(Metro) で作成したWebサービスに アクセスしたところ、エラー「503 Service Temporarily Unavailable」が返ってくる
環境
* AWS Elastic Load Balancer(ELB) * EC2 + OS : CentOS7 + Apache2.4 + Tomcat8.5 + JAX-WS(Metro)
構成
+-----------+ +-----------+ +-----------+ +------------+ https | | http | | AJP | | |Web Service | --------| ELB |-------| Apache |-------| Tomcat |-------| | 443 | | 80 | | 8003 | | |JAX-WS/Metro| +-----------+ +-----------+ +-----------+ +------------+ ※ SSLのみで、http(80)は受け入れない
状況
* Apache / Tomcat 共にアクセスログで200番を返している * Apache / Tomcat 共にエラーログは確認できず * Web Serviceにはリクエストが来ていない * ロードバランサ(ELB)を絡めずに、Apache(SSL)-Tomcatでは問題ない
■ 原因
* JAX-WS/Metro では、どうやら2回リクエストを投げており 1回目は、SSLでWSDLを取得するが、 2回目が、httpでリクエストを投げており、その結果、ELBから503エラーを返してしまう * 恐らく、以下のURLとほぼ同じ現象かと...http://stackoverflow.com/questions/15591696/jax-ws-webservices-load-balancer-with-https-end-point-url-instead-of-http
■ 解決案
* ポイントは、Tomcatのスキーマを https にする設定を行えばいいかと...
Apacheの設定
<VirtualHost *:443> ServerName https://www.samplehost.co.jp ProxyPass /demo ajp://localhost:8443/demo/ SetEnv HTTPS ON </VirtualHost>
Tomcatの設定(server.xml)
<Connector port="8443" protocol="AJP/1.3" proxyPort="443" redirectPort="443" scheme="https" secure="true" />
参考文献
http://stackoverflow.com/questions/15591696/jax-ws-webservices-load-balancer-with-https-end-point-url-instead-of-http解決案
http://blog.admage.jp/?p=649