[Apache] ProxyPassから返るエラー画面を統一する

前提条件

FrontサーバとなるApacheで外部リクエストを受け、ProxyPassでBackendサーバとなるTomcatへ流す。

要件

Backendサーバから返ってくる500系, 400系のエラーを、ErrorDocumentで統一してフロントへ表示したい。

対応内容

/path/to/httpd.conf

ErrorDocument 404 /404

/path/to/reverse-proxy.conf

<VirtualHost *:80>
LoadModule rewrite_module modules/mod_rewrite.so

  <IfModule mod_rewrite.c>
    RewriteEngine On

    # https --> xxサーバ
    RewriteCond %{HTTP:X-Forwarded-Proto} =https [NC]
    RewriteCond %{REQUEST_URI} ^/$ [OR]
    RewriteCond %{REQUEST_URI} ^/robots.txt [OR]
    RewriteCond %{REQUEST_URI} ^/test/.*$
    RewriteRule ^/(.*)$ http://internal-test.com:8080/$1 [P,L,QSA] keepalive=on retry=10

    ProxyPass / http://localhost:8080/ retry=10
    ProxyPassReverse / http://localhost:8080/

    ProxyPreserveHost On

    # 追加
    ProxyErrorOverride On
  </IfModule>
</VirtualHost>

参考site

https://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html#proxyerroroverride
http://d.hatena.ne.jp/rougeref/20130924
https://serverfault.com/questions/357276/errordocument-when-using-apache-as-reverse-proxy