satakesatakeの日記

 | 

2016-03-11

Apacheで行う、特定のURLのみを除き、リバースプロキシさせる設定のレシピ

| 14:06

https://example.com/admin

だけはリバースプロキシさせずに、

https://example.com/

とか、それ以外のものはリバースプロキシさせるようなレシピ

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^/admin - [L]
  RewriteRule ^/(.*) http://example.com:5001/$1 [P,L,QSA]
  ProxyPassReverse /  http://example.com:5001/
</IfModule>

mod_rewriteのPオプションはProxyPassディレクティブと同じ機能を持つ。

…のだが、ProxyPassReverseを直後に書いてやらないとダメらしい。

参考→http://blog.livedoor.jp/techblog/archives/65151527.html

応用

それの応用で、特定のIPアドレス以外はメンテナンス画面を見せるレシピ。RewriteRule の L オプションの活用だ。

#1~3がそれぞれ、if文のブロックのような感覚。

RewriteRule は L オプションを付けると、ルールに合致した際にそこで処理を停める。それ以外は次の行に処理を移す。If文で書ければいいのになあ。

    ErrorDocument 503 /html/maintenance.html

    <IfModule mod_rewrite.c>
      RewriteEngine On

      # 1
      RewriteRule ^/admin - [L]

      # 2
      RewriteCond %{REQUEST_URI} !=/html/maintenance.html
      RewriteCond %{REMOTE_ADDR} !=192.168.0.1
      RewriteRule ^.*$ - [R=503,L]

      # 3
      RewriteRule ^/(.*) http://example.com:5001/$1 [P,L,QSA]
      ProxyPassReverse /  http://example.com:5001/
    </IfModule>
 |