【トラブル】【Java】【JAX-WS】 ロードバランサ - JAX-WS(Metro) でSSL通信した際に503エラーが返ってくる

■ はじめに

 * 以下「環境」下で、「構成」のように、ロードバランサ(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回目は、SSLWSDLを取得するが、
   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" />


関連記事

Linux上の ApacheSSL通信を行う

http://blogs.yahoo.co.jp/dk521123/36499526.html

TomcatApache を連携させる ~設定 / Linux 編~

http://blogs.yahoo.co.jp/dk521123/36072244.html