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

crontab 確認方法

crontabが動かないときに確認すること。 Contents1 cron自体が動いているか(下記コマンドでログを確認)2 実行権限が正しいか3 プログラム内部のファイルパスが絶対パスになっているか4 …

no image

chefのインストール

以前からずっと課題になっていたchefのインストールについてです。 まだ全然わかっていませんが、なんとかvagrantからのインストールをすることができましたのでメモします。 chefでの環境構築とい …

no image

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

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

no image

ECCUBE2,3でのnginx利用

ECCUBE2,3をインストールする機会があったのでメモ。 例によってnginxの設定がめんどいですね。・・ ファイルパス ECCUBE2,ECCUBE3ともに下記パス,URLと仮定します。 [cra …

no image

pythonのアップグレードに関して

pythonのアップグレードに関して。 python2.6だとpipがインストールされていないのですが、入れようとしてハマったのでメモ。 一般的なインストール方法ですが、下記のようになります。 [cr …

アーカイブ