- レンタルサーバー・自宅サーバー設定・構築のヒント -
レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

最終更新日|2011年10月31日

apache のかわりにnginxを使ってみる(4) nginx でリダイレクトするには

カテゴリnginxのインストール・設定 | タグ:

ここまでで、nginx + php-fpm上でWordpressを動作するところまで解説してきました。

  1. apache のかわりにnginxを使ってみる(1) nginxの最新版をインストールする
  2. apache のかわりにnginxを使ってみる(2) php-fpmをインストールする
  3. apache のかわりにnginxを使ってみる(3) nginx + php-fpm でWordPressを動かしてみる

今回は、apache からnginx への移行するための環境設定を行ってみます。

その中でも apacheの特徴である .htaccess を使った転送(リダイレクト)について、nginxでどう実現するかを簡単に解説したいと思います。

これも結論から言うと、

rewrite を使うだけなんです。

いくつか例をあげて解説してみましょう。

nginx でリダイレクトする

nginx でリダイレクトするには、
apacheでは、.htaccessにて設定していた内容を、nginxでは、設定ファイル(/etc/nginx/nginx.conf)で行うだけです。

やり方もそれほど難しくはないので、簡単にやってみましょう。

  • ドメイン丸ごとリダイレクトする

    ドメインへのアクセスを丸ごとリダイレクトする場合、
    通常、apacheでは、.htaccessにて、以下のような記述を行って対応します。
    1
    2
    3
    4
    5
    
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
    RewriteRule ^(.*)$ http://www.redirect.com/$1 [R=301,L]
    </IfModule>
    これは、
    3行目:要求ホスト名が、www.example.comなら、次の行へ続けなさい。
    4行目:全ての要求をwww.redirect.comへリダイレクトしなさい。
    という意味になります。

    これをnginxで実現するには、以下のように設定ファイル(/etc/nginx/nginx.conf)を編集します。
    server {
        server_name www.example.com;
          :
        rewrite ^(.*)$ http://www.redirect.com$1 last;
          :
    }
    
    部分が、編集箇所でリダイレクトを実施している箇所になります。
    基本的に、この1行で大丈夫です。

    書き方は、ほとんど同じで、nginx (rewrite)は、URIの先頭にスラッシュ / が必ずあるのに対して、
    apache (RewriteRule)では、先頭のスラッシュ / はありません。

    注意する点は、それぐらいであとはほとんど同じように記述することができます。

  • あるIPアドレスからの要求時のみリダイレクトする

    あるIPアドレスからの要求時のみリダイレクトする場合、
    通常、apacheでは、.htaccessにて、以下のような記述を行って対応します。
    1
    2
    3
    4
    5
    
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REMOTE_HOST} 111.222.111.222 [NC]
    RewriteRule ^(.*)$ http://www.redirect.com/$1 [R=301,L]
    </IfModule>
    これは、
    3行目:要求元IPアドレスが、111.222.111.222なら、次の行へ続けなさい。
    4行目:全ての要求をwww.redirect.comへリダイレクトしなさい。
    という意味になります。

    これをnginxで実現するには、以下のように設定ファイル(/etc/nginx/nginx.conf)を編集します。
    server {
        server_name www.example.com;
          :
    
        if ( $remote_addr  = '111.222.111.222' ) {
            rewrite ^(.*)$ http://www.redirect.com$1 last;
        }
    
          :
    }
    
    部分が、編集箇所でリダイレクトを実施している箇所になります。
    基本的に、if文を使ってリダイレクトできます。

  • ウェブブラウザの種類でリダイレクトする

    ウェブブラウザの種類でリダイレクトする場合、
    通常、apacheでは、.htaccessにて、以下のような記述を行って対応します。
    ここでは、単純にChromewww.redirect.comへ飛ばしてみます。
    1
    2
    3
    4
    5
    
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} 'Chrome' [NC]
    RewriteRule ^(.*)$ http://www.redirect.com/$1 [R=301,L]
    </IfModule>
    これは、
    3行目:要求元IPアドレスが、111.222.111.222なら、次の行へ続けなさい。
    4行目:全ての要求をwww.redirect.comへリダイレクトしなさい。
    という意味になります。

    これをnginxで実現するには、以下のように設定ファイル(/etc/nginx/nginx.conf)を編集します。
    server {
        server_name www.example.com;
          :
    
        if ( $http_user_agent ~* 'chrome' ){
            rewrite ^(.*)$ http://www.redirect.com$1 last;
        }
    
          :
    }
    
    部分が、編集箇所でリダイレクトを実施している箇所になります。
    基本的に、if文を使ってリダイレクトできます。

if文での判定記号には以下の3つがあります。

~ :右辺の文字列が左辺に含まれるか比較します。
~* : 大文字小文字を区別しないで、右辺の文字列が左辺に含まれるか比較します。
= :左辺と右辺が全く同じか比較します。

if文は、必ず、括弧(の前にブランク(半角空白)を入れるようしましょう。
if( xxxx = YYYY ) のようにifの後にブランク(半角空白)を入れないと構文エラーでうまく読み込んでしてくれないようです。

x if( xxxx = YYYY )
o if ( xxxx = YYYY )

if文は、
server, locationの内でしか使えません。

rewrite文は、

rewrite regex replacement flag

という構成になります。

regex : 正規表現でのマッチパターン
replacement : マッチパターンに一致した場合の変換パターン
flag : リダイレクトフラグ

最後のリダイレクトフラグに何を指定するかで、HTTPのステータス番号も変わってきます。

  • last
    rewriteは完了で、以降のマッチするURI や locationの処理は継続します。
  • break
    rewriteは完了です。
  • redirect
    一時的なリダイレクトの意味で使います。このとき、HTTP ステータス番号 302 を返して、リダイレクトを実行します。
  • permanent
    恒久的なリダイレクトの意味で使います。このとき、HTTP ステータス番号 301 を返して、リダイレクトを実行します。
このようにnginxでも同じようにリダイレクトができます。
見方によっては、apacheよりすっきりして見やすく感じますね。

rewriteは、if文の中で設定できる数少ないディレクティブのひとつです。
これによって、かなり複雑な処理もできるようになっています。

タグ:

この記事を読んだ人は次の記事も読んでいます :
1 件 コメントがあります。 コメントを投稿する
  1. [...] apache のかわりにnginxを使ってみる(4) nginx でリダイレクトするには | レンタ… [...]

コメントを投稿 :

お名前 *

メールアドレス *
(コメント欄には、表示されませんが入力が必要です。)

サイトアドレス

*


一押し!!レンタルサーバー(VPS)

さくらのVPS
さくらのVPS

さくらのVPSさくらのVPS

話題のさくらのVPS 新プラン(1G ¥980から)が、
ついに 3/29 提供開始 しました。
超人気で売り切れ状態でしたが、ようやく解消されました。 ;)
詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

root権限ありで ¥980 / 月 (初期設定費 ¥0) と非常にリーズナブルな CPU 2(core)の 1G プランから、 最高 CPU 6(core), メモリ 8(GB), 容量 800(GB) までとプランが充実。

さらに、どのプランでも好きなOSが選べます:)
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを !!

おすすめのVPSは、こちらをご確認ください。


一押し!!キャンペーン情報


お名前.com VPS(KVM) 提供開始です。 :)
2GBメモリ / 3Core を ¥1,153 – の格安価格で提供! :)

  • メモリ2GBプラン CPU:3core、月額:1,153円から
  • メモリ4GBプラン CPU:4core、月額:3,243円から
  • メモリ8GBプラン CPU:6core、月額:6,585円から
  • メモリ16GBプラン CPU:10core、月額:13,271円から

さらに、2Gプラン
初期設定費無料 キャンペーン ( 2012/5/31 12:00 まで ) 実施です。 :D

さくらのVPS新プランへの対抗むき出し!? (^x^) のプラン内容ですが、間違いなく価格は安くなっていますね。まずは、お試しですね。 :)

お名前.com VPS(KVM)の詳細については、 こちらのお名前.com VPS(KVM)のサイト お名前.com VPS(KVM)のサイトへへどうぞ。(お試し期間が15日あります。)

その他のキャンペーン情報は、こちらをご確認ください。




カテゴリ






海外サーバーをお探しなら



海外サーバーをお探しなら、ラピッドサイトラピッドサイトがおすすめかもしれません。

さすがに、海外のサーバーになると、
英語が苦手だな
海外のレンタルサーバー会社は不安
などなど二の足を踏みがちですね。

ラピッドサイトラピッドサイトは、
日本の企業でありながら、海外(アメリカ)のデータセンターを借りることができます。

最近の日本の節電状況が落ち着くまで海外にもバックアップさせておくのも一つのアイデアかもしれませんね。
データセンターは、NTTコミュニケーションズのデータセンターをそのまま利用していますから、その点でも安心かもしれませんね。

お申し込みは、こちらのラピッドサイトのホームページこちらのラピッドサイトのホームページからどうぞ。

ブログランキング・にほんブログ村へ
にほんブログ村
  • はてなブックマークへ追加するはてな登録数
  • Yahoo!
  • Livedoor Clip
  • FC2
  • Nifty Clip
  • POOKMARK. Airlines
  • Buzzurl(バザール)
  • Choix
  • newsing
  • del.icio.us
ページトップへ