LoginSignup
15
25

More than 5 years have passed since last update.

nginxに.htaccessを移行する。

Last updated at Posted at 2018-08-04

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 停止
15
25
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
15
25