Apacheでは、公開デレクトリィに.htaccessを配置し各種設定を行える。しかし、機能が多すぎるので、よく使う機能について以下にまとめる。
アクセス制限
複数指定する場合の優先順位は、必ずしも下に書いたものが優先されるとは限らないことに注意する。
IPアドレスによる制限
設定
特定のIPアドレスのみを許可する。
order deny,allow
deny from all
allow from (許可するIPアドレスもしくはドメイン名)
allow from (許可するIPアドレスもしくはドメイン名)
.
.
.
解除
特定のデレクトリィ以下をアクセスを許可する。
allow from all
BASIC認証(ID及びパスワード)による制限
BASIC認証(ID及びパスワード)はキャッシュ制御に注意する。キャッシュの有効期限とBASIC認証情報の更新は直接リンクしていない。また、一部のブラウザーでは何度も古い認証情報でアクセスする場合があるが、何度か認証情報を入力すると更新される。
設定
フルパス部分はURLではなくファイルシステムのパスを記述する必要があることに注意。
AuthUserFile (フルパス)/.htpasswd
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
.htpasswdの作成
新規でカレントデレクトリィの.htpasswdを生成する場合、次のコマンドをbashから実行する。パスワードは10文字の乱数文字列で設定される。
username=(ユーザ名)
passwordfile=(フルパス)/.htpasswd
password=`perl -e "@c = (a..z,A..Z, 0..9); print @c[rand @c] for 1..10"`
htpasswd -c -b $passwordfile $username $password
echo "$username $password"
新規の場合
ここでの新規とは.htpasswdを新規に作成する意味である。
htpasswd -c -b (フルパス)/.htpasswd ユーザ名 パスワード
更新の場合
次のコマンドは、.htpasswdを更新し、ユーザーを追加もしくはパスワードを変更する。.htpasswdがなければ、ファイル作成されない。
htpasswd -b (フルパス)/.htpasswd ユーザ名 パスワード
セキュリティ
ほとんど発生しないが、上記の例のようにhtpasswd コマンドにパスワードを直接コマンドラインに記述すると、htpasswdが起動している一瞬の間psコマンドで表示されることは頭に入れておきたい。現在主流のOSでは、プロセスへのアクセス権が必要なので、アカウントを共有しない限り問題は発生しない。
$ps
(省略)
12770 pts/1 R 0:00 htpasswd -b -c .htpasswd user3750 password
(省略)
Webサービス
htpasswdを生成するWebサービスがいくつか公開されている。例えば次のサイトがある。
解除
特定のデレクトリィ以下をBASIC認証なしでのアクセスを許可するには次のように記述する。
Satisfy any
allow from all
有効期限
コンテンツの有効期限を設定する。ExpiresヘッダーもしくはCache-Controlヘッダーを出力するが、ここではExpiresヘッダーについて記述する。mod_expiresが必要。単位は様々使えるが、daysとminutesの2つだけで十分である。
MIME Typeを使う場合
画像ファイルのみ60分有効で、他のファイルは1日有効の場合の例。
ExpiresActive On
ExpiresDefault "access plus 1 days"
ExpiresByType image/* "access plus 60 minutes"
拡張子を使う場合
jsファイルのみ60分有効で、他のファイルは1日有効の場合の例。
ExpiresActive On
ExpiresDefault "access plus 1 days"
<FilesMatch "\.js$">
ExpiresDefault "access plus 60 minutes"
</FilesMatch>
その他
リバースプロキシ
apache2.4では、リバースプロキシの設定に.htaccessを使うことはできない。
nginx
nginxには.htaccessに相当する機能がない。動作中に設定を変更することはできないので設定ファイルを変更後、nginxの再起動設定再読込が必要になる。どうしても対応させたいときには、次の方法がある。しかし、どれも.htaccessを再現しているとは言い難い。
- 設定ファイルのコンバータを用意する。htaccessを更新する度に、設定ファイルのコンバートを行いnginxを
再起動設定再読込させればよい。コンバータには次のWebサービスがある。https://winginx.com/ja/htaccess - Apacheを使う。nginxをリバースプロキシで動作させApacheにアクセスする。当然、Apacheは.htaccessに対応しているので、.htaccessが使えるようになる。
参考サイト
乱数文字列の生成 http://d.hatena.ne.jp/miau/20110324/1300966320
apache公式ドキュメント http://httpd.apache.org/docs
####### 誤りやもっといい方法など、ご指摘ください。