6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

.htaccessのメモ(アクセス制限と有効期限)

Last updated at Posted at 2018-07-09

Apacheでは、公開デレクトリィに.htaccessを配置し各種設定を行える。しかし、機能が多すぎるので、よく使う機能について以下にまとめる。

アクセス制限

複数指定する場合の優先順位は、必ずしも下に書いたものが優先されるとは限らないことに注意する。

IPアドレスによる制限

設定

特定のIPアドレスのみを許可する。

.htaccess
order deny,allow
deny from all
allow from (許可するIPアドレスもしくはドメイン名) 
allow from (許可するIPアドレスもしくはドメイン名)
.
.
.
 

解除

特定のデレクトリィ以下をアクセスを許可する。

.htaccess
allow from all

BASIC認証(ID及びパスワード)による制限

BASIC認証(ID及びパスワード)はキャッシュ制御に注意する。キャッシュの有効期限とBASIC認証情報の更新は直接リンクしていない。また、一部のブラウザーでは何度も古い認証情報でアクセスする場合があるが、何度か認証情報を入力すると更新される。

設定

フルパス部分はURLではなくファイルシステムのパスを記述する必要があることに注意。

.htaccess
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認証なしでのアクセスを許可するには次のように記述する。

.htaccess
Satisfy any
allow from all

有効期限

コンテンツの有効期限を設定する。ExpiresヘッダーもしくはCache-Controlヘッダーを出力するが、ここではExpiresヘッダーについて記述する。mod_expiresが必要。単位は様々使えるが、daysとminutesの2つだけで十分である。

MIME Typeを使う場合

画像ファイルのみ60分有効で、他のファイルは1日有効の場合の例。

.htaccess
ExpiresActive On
ExpiresDefault "access plus 1 days"
ExpiresByType image/* "access plus 60 minutes"

拡張子を使う場合

jsファイルのみ60分有効で、他のファイルは1日有効の場合の例。

.htaccess
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

####### 誤りやもっといい方法など、ご指摘ください。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?