Hai.Adachinです。
今回はちょっとnginxでリダイレクトの設定をする機会があったのでブログします。
例えば、コーポレートのドメインが変わった。古いサイトは使わない。and新しいドメインを作ってそっちにリダイレクトさせる。
これを対応するのがインフラエンジニア。
正規表現とか駆使してできるようになれば、先輩に
「(・∀・)イイネ!!」
と褒められるのでちゃんと抑えていきましょう!!
■なにがしたいのか
例えば
①www.adachin-server.comにアクセスするとwww.adachin.comにリダイレクトしてほしい
②www.adachin-server.com/index.html xxx_xxx.htmlに来た時もwww.adachin.comにリダイレクトしてほしい
(・ω<)とりあえず①は出来そうだ。。②は正規表現かな。。
とりあえず基本から説明していきます。
■Nginxのリダイレクト方法について
locationとrewriteを使います!
ApacheだとRewriteRuleを使いますね。
rewiteは簡単ですので割愛♡
locationがむずいので説明します。
で、これでどうすんの?
■locationの優先順位について
locationを使ってURLに応じた制御ができます。
例えば
www.adachin-server.com/hogeの場合のときはこうするなどなど。
では、修飾子は全部で5つあるので覚えましょう。
- = : 完全一致
- ^~ : 前方検索(正規表現より優先度が上)
- ~ : 正規表現(大文字小文字区別あり)
- ~* : 正規表現(大文字小文字区別なし)
- なし : 前方検索(正規表現より優先度が下)
おん?そんなに難しくはありません。
ちなみに上記の順番は処理の優先順でもあるので、ひとつずつ例を出して説明します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
location = / { # / のみが条件に一致します。 # 完全一致した場合は、何よりも優先され以降のいかなるチェックも(正規表現であっても) # チェックされずに終了します。 [ configuration A ] } location / { # / で始まる全てのURIに一致します。 # しかし、正規表現や文字列が長いものが優先的に処理されます。 [ configuration B ] } location /documents/ { # /documents/ で始まる全てのURIに一致します。 # しかし、正規表現のチェックは、続けて処理されます。 # これは、正規表現のチェックで一致しなかった場合のみ、一致したと判断されます。 [ configuration C ] } location ^~ /images/ { # /images/ で始まる全てのURIに一致したら、そこで検索終了となります。 # これは、もしURIがこの条件に一致したら、以降いかなるチェックも(正規表現であっても) # チェックされないことを意味します。 [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { # 末尾が、gif, jpg, or jpeg の場合、一致します。 # しかし、/images/ ディレクトリのすべての要求は、Configuration Dで終了してしまうので # このディレクティブは無視されます。 [ configuration E ] } |
要求 : http://example.com/ -> configuration A
要求 : http://example.com/index.html -> configuration B
要求 : http://example.com/documents/document.html -> configuration C
要求 : http://example.com/images/1.gif -> configuration D
要求 : http://example.com/documents/1.jpg -> configuration E
なるほど。。分からな!いや分かる!
とりあえず①は予想付いたのかと思います。
■答えをさっさと教えてくれい!
はい。
1 2 3 |
location = / { rewrite ^/$ http://www.adachin.com permanent; } |
・解説
とりあえず一行目の/はwww.adachin-server.com→このときはと制御しています。
さらには完全一致なので/のみ来た時だけです!
rewiteは/$で変数指定してリダイレクト先をぶち込んでます。
permanentはコード301を返します。permanent以外にも・・・
・last
rewriteの実行を終了し、書き換えられたURIに対して最初から ロケーションマッチをやり直します。
・break
rewrite の実行を終了します。
・redirect
コード302を返します。
■②のほうは?
長くなったので次回ブログします。
(・ω<)ノシ
参考:http://heartbeats.jp/hbblog/2012/04/nginx05.html
0件のコメント