最新ページ

2009-06-22 Mon

Apache でバーチャルホスト運用時の Proxy の設定 [Apache]

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 バーチャルホスト説明書

2008-01-21 Mon

Apache 2.2.8 リリース [Apache]

Apache 2.2.8 がリリースされた。
もう、windows 版が公開されている。

後でインストールしよう。

いったんアンインストールするんだっけ?

2007-09-14 Fri

mod_speling [Apache]

URL のタイプミスに対応するモジュールがあった。

[2007-09-04-1] の目的には使えない。

2007-08-06 Mon

windows 版バイナリには、 mod_filter が存在しない。 [Apache]

apache 2.2.4 windows 版バイナリには、 mod_filter が存在しない。
自分でコンパイルしないといけないようだ。

2007-08-03 Fri

XHTML の MIME [Apache]

XHTML の MIME は application/xhtml+xml
XHTML の 拡張子 は .xhtml で登録されている。

Content-Type は application/xhtml+xml でレスポンスがある。

IE は XHTML の MIME を認識しないので表示できない。
IE に HTML の MIME で送信すると表示できる。

mod_rewrite で書き換える方法が見つかる。

mod_rewrite を使う場合

    <FilesMatch "\.xhtml\.?">
        Options FollowSymLinks 
        RewriteEngine On
        RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml
        RewriteRule .* - "[T=text/html]"
    </FilesMatch>

mod_rewrite だと期待した動作をする。

mod_rewrite を使わない設定だと、

    <FilesMatch "\.xhtml$">
        SetEnvIf Accept "application/xhtml\+xml" ACCEPT_XHTML
        Header set Content-Type text/html env=!ACCEPT_XHTML
    </FilesMatch>

で出来そうだが Content-Type がセットできない。
Content-Type をセットした後に上書きされている気がする。