nginxでは.htaccessを利用できないが、完全ではないもののコンバータを使うことで簡略化できる。この記事では、コンバータを効率的に行うスクリプトを紹介する。デレクトリィ構成は、debian strechを念頭に置くが、どの環境でも大筋では変わらないと思う。
#コンバータ
Webサービス http://winginx.com/ja/htaccess を使う。
##コンバータの限界
次のような例ではうまくいかない。
order allow,deny
allow from 192.168.0.2
allow from 192.168.0.1
192.168.0.2のみ反映される。
# nginx configuration
deny all;
allow 192.168.0.2;
#Webサービスのデレクトリィ構成
##コンテンツ
debianのWebサービスのデレクトリィ構成は、apache nginx共に変わりがなく次の形。virtual domainを使う場合は、document rootが複数ある形になる。userdirを使わない場合はユーザーデレクトリィはない。
デレクトリィ | 摘要 |
---|---|
/var/www/html | ドキュメントルート |
/home/*/public_html | ユーザーデレクトリィ |
##.htaccess
.htaccessをapacheではコンテツ用のデレクトリィに直接配置するが、nginxでは設定ファイル内に全て記述する必要がある。
ファイル | 摘要 |
---|---|
/etc/nginx/sites-available/* | defalutが規定値として設定されている。また、現在有効なサイトは sites-enabled以下にリンクされている |
#curlによるコンバータの利用
自分用に設定を移行するための簡単なシェルスクリプトを書いた。このシェルスクリプトは、webDir=/var/www/html以下のデレクトリィを走査し全ての.htaccessをコンバータに通す。出力された結果はniginx.confに出力されるので、内容をnginxのサイト毎の設定ファイルのserver{以下に書き足す。実際に適応する場合は、内容に十分注意してほしい。またスクリプトでのアクセスは、サーバー過負荷にならないように配慮する必要がある。
webDir=/var/www/html
config=nginx.config.`date "+%Y%m%d-%H%M%S"`
files=`find $webDir -name .htaccess`
for file in $files; do
data=`cat $file`
echo "## $file" >>$config
url=`echo $file | sed -e "s|^${webDir}\(.*\)/.htaccess$|\1|"`
echo location $url { >>$config
curl http://winginx.com/ja/htaccess/ajax \
-F "htaccess=$data" -H 'X-Requested-With: XMLHttpRequest'\
>> $config
echo >> $config
echo } >> $config
echo >> $config
done
#nginxの操作
よく使うコマンドを簡単にまとめる。
コマンド | 摘要 |
---|---|
nginx -t | 設定テスト |
nginx -s reload | 設定再読込 |
service nginx start | 起動 |
service nginx stop | 停止 |