ラベル Apache の投稿を表示しています。 すべての投稿を表示
ラベル Apache の投稿を表示しています。 すべての投稿を表示

2014年6月25日水曜日

mod_proxy mod_proxy_balancer と mod_dirを使う時の注意






mod_proxy を使って、バックエンドサーバーにリクエストを振り分けていたときの話です。




ServerName www.example.com


ProxyPass / balancer://cluster/
ProxyPassReverse / balancer://cluster/

<Proxy balancer://cluster/>
Balancermember http://bk1.example.com loadfactor=50
Balancermember http://bk2.example.com loadfactor=50
</Proxy>



上記のように設定して、www.example.com → bk1.example.com と bk2.example.com にリクエストがそれぞれ渡されます。


ここで、bk1 や、bk2 側で、mod_dir を利用したリダイレクトが起こった場合に


クライアントに戻されるURLが問題になりました。




クライアント → http://www.example.com/test → http://bk1.example.com/text

                          ↓ mod_dir

クライアント ← http://bk1.example.com/test/ ← http://bk1.example.com/test/



mod_dir は、URLがスラッシュ(/)で終わっていないときに、スラッシュをつけたURLに変換してくれます。


ただし、リダイレクトのURLがどうも http:// からのフルパスで変換するみたいで


バックエンドサーバーのServerNameのままクライアントにリクエストを返してしまいました。



ProxyPassReverse / balancer://cluster/


上記を設定しているのでURLの書き換えをしてくれると思ってたのですが


どうも書き方が違うらしく



ProxyPassReverse / http://bk1.example.com/
ProxyPassReverse / http://bk2.example.com/


こう書くことで、意図したURLの書き換えをしてくれました。


しかし、ProxyPassReverse / balancer://cluster/ この記述は、何をしてるんですかね?


URLを書き換えてくれなければ、意味がないと思うのですが。。。





DirectoryIndex と mod_rewrite を使うときの注意



DirectoryIndex と mod_rewrite を使うときに / で終わるパス(ディレクトリ)を指定したときの動作には注意が必要です。





mod_rewrite で、index.html → index.php とか index.rb とかしている場合



http://example.com/index.html


にアクセスすると



http://example.com/index.php


と通常はURLがリライトされます。ところが



http://example.com/


とindex.htmlを省略してアクセスすると



403 forbidden


が出る場合があります。



http://example.com/ → http://example.com/index.html → http://example.com/index.php


上記のような連続したURLのリライトを期待したのですが 403 と怒られました。





どうもこれは、DirectoryIndexの設定で index.html を参照するように設定しているためで


単にURLを index.html とリライトするのではなく


実際に index.html ファイルの有無を判断するようで


mod_rewirte でURLの書き換えが起こる前に


先にindex.htmlのチェックし、ファイルがないので 403 forbidden となるようです。


手っ取り早く対処するには、ダミーのindex.htmlを置くのが簡単です。





2009年4月18日土曜日

mod_proxy でバックエンドにSSLを利用する設定



あまり実運用では、こういう場面は経験はないですが


mod_proxy で バックエンド側とSSL通信するような時の設定です。



SSLProxyEngine On
ProxyPass / https://example.com/
ProxyPassReverse / https://example.com/


ローカルのテスト環境に設置したSSLサイトを、無理やり外部からアクセスできるように


Proxyを通す必要があったため、こういうことになったのですが


実際の運用では必要ないかもしれませんね。参考程度ですね。





2009年3月19日木曜日

X-Forwarded-Forを使って、バックエンドでアクセス制限



バックエンドサーバーで、IPを使ったアクセス制限をすると


クライアントがフロントエンドのIPアドレスになってしまうため


意味が無い。そこで、X-Forwarded-Forを使って制限をする。




.htaccess

SetEnvIf X-Forwarded-For "192\.168\.0\.[0-9]{1,3}" apal

order deny,allow
deny from all
allow from env=apal



すぐに書き方を忘れてしまうので、備忘録です。