/ / メモ
2009-06-22

referer でアクセス制限をかけているサイトの RSS を購読していると、
画像が表示されず残念な思いをします。

そこで、リクエストヘッダーの書換で、アクセス制限を回避します。

Apache の mod_proxy を使ってみます。

mod_proxy と mod_proxy_http を組み込む

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

フォワードプロキシを使う。

ProxyRequests On

すべてのサイトへのアクセス制限

<Proxy *>
  Order Deny,Allow
  Deny from all
  Allow from 192.168.0
</Proxy>

特定のサイトに対するリクエストヘッダの書換とアクセス制限を、

<Proxy example.com>
  Order Deny,Allow
  Deny from all
  Allow from 192.168.0
  RequestHeader unset referer
</Proxy>

このように設定してしまうと、
ほかのサイトに対するアクセス制限は設定されません。

そこで、すべてのサイトに対するアクセス制限と、
特定のサイトに対するリクエストヘッダの書換をするには、

<Proxy *>
  Order Deny,Allow
  Deny from all
  Allow from 192.168.0
  SetEnvIf Host example\.com unset_Referer
  RequestHeader unset Referer env=nset_Referer
</Proxy>

このようにします。

以上の設定で、プロキシとして使うことができます。

バーチャルホストで運用しているマシンにプロキシ用のホストを追加する場合、
以下のように設定すると、デフォルトのバーチャルホストにマッチしてしまいます。

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName www.example.com
  DocumentRoot /www/example1
    ...
</VirtualHost>

<VirtualHost *:80>
  ServerName www2.example.com
  DocumentRoot /www/example2
    ...
</VirtualHost>

<VirtualHost *:80>
  ServerName proxy.example.com
    ...
</VirtualHost>

これは、 Host: ヘッダが SrverName に一致しないために起こります。

そこで、別のポート番号をプロキシ用に割り当てて待ち受けるようにします。

Listen 8080
NameVirtualHost *:8080

<VirtualHost *:8080>
  ServerName proxy.example.com
    ...
</VirtualHost>

参考
Apache モジュール mod_proxy
Apache バーチャルホスト説明書

トラックバック http://mikanya.dip.jp/memo/2009-06-22-1