@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Basic 認証 + レスポンスヘッダのカスタマイズ

Basic 認証をかけつつレスポンスヘッダをカスタマイズしたかったので Apache と nginx で試してみた。 Server version: Apache/2.2.15 (Unix) と nginx version: nginx/0.8.54 で試した。

Apache の場合

Header ディレクティブに always を追加すればよい。デフォルトでは 20x レスポンスの場合のみヘッダを操作する挙動なので注意。

オプションの condition は onsuccess か always のどちらかを指定できます。これは内部ヘッダテーブルのどれを 操作するかを決定します。onsuccess は 2xx ステータスコードの、always は全てのステータスコード (2xx を含む) の意味になります。 あるモジュールでセットされるヘッダをアンセットしたい場合は特に、 どのテーブルが影響を受けるかを実際に試したほうがよいでしょう。

http://httpd.apache.org/docs/2.2/ja/mod/mod_headers.html#header

Basic (Digest) 認証と組み合わせるとこんな感じ。

Header always set X-Respect-MovableType "melody:nelson"
AuthType Basic
AuthName "X-Respect-MovableType"
AuthUserFile /etc/httpd/htpasswd
Require valid-user

nginx の場合

標準でもヘッダはいじれるけど、

Adds headers to the HTTP response when the response code is equal to 200, 204, 301, 302 or 304.

http://wiki.nginx.org/HttpHeadersModule

ということなので 401 は未対応。なので NginxHttpHeadersMoreModule が必要になる。ソースから入れなおす必要があるのでめんどい。

めんどいので実際やってないけど、 headers_more つかわずに HttpHeadersModule だけで書くとこんな感じになる。

http {
    server {
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            add_header X-Respect-MovableType "melody:nelson";
            auth_basic "X-Respect-MovableType";
            auth_basic_user_file htpasswd;
        }
    }
}

この add_header を more_set_headers "X-MovableType: melody:nelson"; にかえればうごくと思う。