Nginx よく使う設定

ソフトウエア

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

設定ファイルの記述方法(基本)

インストール手順はこちらをご確認ください。

httpディレクティブ

httpディレクティブはサーバ毎の設定を行うserverディレクティブ、さらにURLパス毎の設定を行うlocaltionディレクティブと階層化されています。

http {
    httpコンテキストの設定

    server {
        サーバ毎の設定

        location PATH {
            URLパスの設定
        }
        location PATH {
            URLパス毎の設定
	}
        ...
    }

    server {
        ...
    }
}

httpコンテキストの設定

デフォルトのままで事足りますが、バージョン情報の隠匿とgzip圧縮の設定を追加します。

serverディレクティブ

nginxの設定ファイルに/etc/nginx/conf.dディレクトリにあるconfファイルを読み込む設定があります。

include /etc/nginx/conf.d/*.conf;

このconf.dディレクトリにサーバ毎の設定ファイルを置くことにより、その設定ファイルが読み込まれます。

ファイル名が読み込まれる順が決まってないのでデフォルトサーバの設定を記載していないと、初めに読み込んだバーチャルサーバの設定が反映します。ご注意ください。

serverコンテキストの設定

serverコンテキストに記述するlistenディレクティブとserver_nameディレクティブにより、IPベース、名前ベースのバーチャルサーバとして区別し複数のバーチャルサーバを運用します。

listen

サーバがリクエストを受け付けるポート番号、サービス名を設定します。複数のポート番号、サービス名を指定することも可能です。

    listen  80 ;
    listen  443 ssl http2;

server_name

サーバの名前を設定します。複数のサーバ名をする場合はスペース区切りで指定します。

    server_name rin-ka.net www.rin-ka.net;

root

ドキュメントルートのディレクトリを設定します。

httpコンテキスト、serverコンテキスト、locationコンテキストに記述できます。

通常はserverコンテキストか、locationコンテキストの”/”に標準のドキュメントルートを設定し、必要に応じて個別のパスのlocationコンテキストに個別にドキュメントルートを設定します。

   server {
       root   /usr/share/nginx/html;
       location /test/ {
          root   /usr/share/nginx/test;
       }
    }
   server {
       location / {
          root   /usr/share/nginx/html;
       }
       location /test/ {
          root   /usr/share/nginx/test;
       }
    }

index

リクエストのURLが”/”で終わっている時にインデックスとして使われるファイル名を設定します。

httpコンテキスト、serverコンテキスト、locationコンテキストに記述できます。

   index index.html index.php;

rewrite

URLをリダイレクトすることができます。

serverコンテキスト、locationコンテキストに記述できます。

   last      : rewriteの処理を停止し、書き換えられたURLに対してlocationを再検索します。
                別のlocationにあるrewriteは実行されます。
   break     : rewriteの処理の停止し、locationの検索を停止します。
                別のlocationにあるrewriteは実行されません。
   permanent : 恒久的なリダイレクト「301」を返します。
   redirect  : 一時的なリダイレクト「302」を返します。
  # lastの場合
  server {
     rewrite ^/common/(.*)$ /_common/$1 last;
     location { ... }
  }
  # breakの場合
  server {
    location { 
        rewrite ^/common/(.*)$ /_common/$1 break;
        ... }
  }
  # 301の場合
  server {
     rewrite ^(.*)$ https://rin-ka.net$1 permanent;
  }
  # 302の場合
  server {
     rewrite ^(.*)$ https://rin-ka.net$1 redirect;
  }

locationコンテキストの設定

URLのパス毎の設定を記述できます。リクエストされたURLパスがこのlocationディレクティブのパスの条件に一致した場合に、locationコンテキストに記述した設定が適応されます。

パスの条件の評価方法は前方一致と正規表現の2つです。

   なし : 前方一致
   ^~   : 前方一致。正規表現よりも優先。
   =    : 完全一致
   ~    : 正規表現(小文字・大文字を区別)
   ~*   : 正規表現(小文字・大文字を区別しない)

パスに対して一致する条件が複数あるときの優先順位

=     >    ^~    >    ~,~*(定義した順番)    >     なし

URLパスの代わりに@+文字列を指定すると、パスの書き換えを行わずに内部リダイレクトを行う際に利用できます。

  location @test {
    ...
    }

try_files

私は、この機能をよく利用します。

リバースプロキシとして稼働させているnginxでは負荷分散として機能します。

自分のディレクトリを調べて、無ければリダイレクトさせる

2段階の処理を実行できるのでとても便利です。

 

ファイル、ディレクトリの存在チェックを行います。存在しなかったらリダイレクトさせます。

   try_files $uri /hoge.html;

リダイレクト先のパスの代わりコードを返す事もできます。

   try_files $uri =404;

リダイレクト先のパスの代わり内部リダイレクトさせる事もできます。

パスの書き換えを行わないので内部のアプリケーションサーバにリダイレクトさせることが出来ます。

   location {
      # 静的コンテンツ
      try_files $uri  @test;
   }
   location @test{
    # 動的コンテンツ
       proxy_pass  http://xxx.xxx.xxx.xxx;
   }

設定ファイルの記述方法(実践)

Nginx リバースプロキシ

Nginx のリバースプロキシでファイルをキャッシュする方法をまとめました。

Nginx でリバースプロキシを利用する大規模なサイトの場合、内部に配置されたウェブサーバーのアクセスログが想定外になる場合に対応方法です。

X-Forwarded によるHTTPトラフィックの制御

X-Forwarded ヘッダーを見て、HTTPトラフィックを制御する方法です。負荷分散の仕組みを利用する場合は、ポートだけでトラフィックを制御できなくなります。大規模なサイトには必須の設定です。

ベーシック(Basic)認証

ベーシック認証は容易に構築できるので、特定のユーザーのみアクセス許可を行いたいテストサイトなどではよく使う機能です。

Let’s Encrypt ワイルドカード証明書の設定方法

ウェブサイトのセキュリティは極めて重要です。特に、多くのサブドメインを持つ場合、すべてを保護するためにどのようにSSL/TLS証明書を取得できるかを知っておくことは不可欠です。

Let’s Encryptを利用してワイルドカード証明書を無料で取得できます。

関連記事 Let’s Encrypt ワイルドカード証明書の設定方法:すべてのサブドメインを保護