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

journald

CentOS7では従来のsyslogデーモンと並行してjournaldというログ管理サービスがあります。 Contents1 コマンド一覧2 参考図書・リンク コマンド一覧 [crayon-656b5 …

no image

Apacheでのリバースプロキシ

jenkinsの復習をしていたんですが、持ってたVPSサーバーにjenkins環境を構築、jenkinsのURLをサブドメインにし、アクセスした時に別ポートに飛ばす仕様にしました。 前提条件として下記 …

no image

シェルスクリプトでのsshログインとメール送信

久々にシェルスクリプトをやったんでその復習を。 応用範囲は結構広そうです。 Contents1 ファイルの読みこみ方2 関数の定義、使い方3 SSHログイン4 ssh鍵認証つきのログイン5 メール送信 …

no image

AWSのVPCの設定に関して

AWSでEC2を立ち上げたことはありましたが、VPC(Virtual Private Cloud)は使ったことがなかったので、これを機に調査してみました。 Contents1 VPCとは?2 構成3 …

no image

firewall復習 ansibleコマンドもかねて

CentOS7ではファイアーウォールの設定をfirewallというコマンドで行います。要はportのブロックですね。 以前下記リンクでもfirewallについて書いたんですが、あまり理解もできていなか …

アーカイブ