設定ファイルの記述方法(基本)
インストール手順はこちらをご確認ください。
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 ワイルドカード証明書の設定方法:すべてのサブドメインを保護