skillup

技術ブログ

サーバー・ネットワーク

set,ifディレクティブ,変数に関して

投稿日:2016年12月12日 更新日:

これまで基本的なnginxの設定についてみてきましたが、今回はset,ifディレクティブについてみていきます。

変数とset

nginxではコンフィグ内で変数を利用できます。setディレクティブをもといることで変数の定義が行えます。

set 変数名 値

システム自体が最初から定義している変数も多数あり、これらを利用することで柔軟な設定が可能です。

例えば1台のサーバーでユーザーごとに個別のサブドメインとドキュメントルートを用意したい場合などはバーチャルホストを複数設定することで解決することができます。

私はこの方法しかないと思っていましたが、変数を使えば一括で解決できますね。

下記のように書くことなどができます。

$hostというのはもともとnginx内で定義されている変数です。

また特定IPを禁止する方法などは下記のように書くことで解決できます。

ちょっとしたプログラミングのようなことができますが、一般的なプログラミング言語ほどの自由度はありません。できることは下記のようなことに限られます。

=    変数の一致
~    正規表現マッチ(大文字、小文字を区別)
~*  正規表現マッチ(大文字、小文字を区別しない)
-f   指定したファイルが存在する
-d  指定したディレクトリが存在する
-e  指定したファイル、ディレクトリまたはシンボリックリンクが存在するか
-x  指定したファイルに実行権限が存在するか

サーバー・インフラ徹底攻略にあった例を書かせていただきます。

上記は下記のような流れになっています。

  1. /var/tmp/do_mnt というファイルがあればメンテ画面maintenanceに飛ぶ
  2. 管理者のIPアドレスの場合はその判定を行わない
  3. maintenanceは名前付きlocation(後述)に飛ばす

代表的な変数としては下記のようなものが有名です。

さらに詳しく知りたい方はNginx入門が詳しいですね。辞書のように活用できるかと思います。

今まであまり説明していなかったerror_pageディレクティブと名前付きlocationについて

error_page

HTTPステータスコード400,500番台のエラー発生時に表示するページを指定できます。

例えば404エラーが発生した際に、/404.htmlを表示するには下記のように表示します。

また403がおきたときに404で返し、あたかもファイルが存在しないかの用に見せる方法もあります。

名前付きlocation

名前付きlocationはその名の通り、locationディレクティブに名前を付ける機能です。例えば次にしめす設定はfaviconがない代わりに代わりの画像を表示する機能です。

上記の動きは下記のようになります。

  1. faviconがない場合は404エラー
  2. その際にerror_pageディレクティブで指定している@emptyが呼び出されます。
  3. @emptyではemtpy_gifディレクティブを利用し、ダミー画像を表示しています。※empty_gifというのはnginxに元々備わっている機能です。

-サーバー・ネットワーク
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

ログ抽出コマンド特集 その3 データの収集や抽出にかかわるコマンド群(sort ,tr,cut)

サーバーの負荷を見る場合、unixコマンドでログを抽出できたりすると何かと便利です。 いままでも下記の記事でこれらの出力を行いました。 ログ抽出コマンド特集 その1 cat+grep+sort 私が本 …

no image

mod_aliasに関して

同一ドメインでパスによってルートディレクトを分けたい時。 この場合、apacheの設定ファイルをいじることになります。 一般的にはhttpd.confではなく*.confと言った設定ファイルを使い、エ …

no image

ロードアベレージ監視シェルスクリプト

ロードアベレージの監視シェルスクリプトについて Contents1 使用コマンド1.1 uptime1.2 /proc/cpuinfo1.3 bc2 ソース3 他参考リンク 使用コマンド uptime …

no image

クロスサイトスクリプティング(XSS)

これまた非常によく聞く攻撃方法ですね。 Contents1 クロスサイトスクリプティングとは?2 被害3 対策 クロスサイトスクリプティングとは? 動的なページの表示生成の際に悪意のあるスクリプトを埋 …

no image

カレントディレクトリ以下のすべてのCR+LFをLFに

windows環境からファイルをアップしていると文字コードがバラバラだったりすることが多々あります。 まあ何がめんどくさいかというと差分がチェックできない。これが最悪です。 gitのdiffコマンドの …