1
2

nginx.confの解説、書き方

Posted at

経緯

nginxの設定ファイルを書こうとするとテンプレートはいっぱい出てきます。しかし、雰囲気で使っていたため、おさらいです。

nginxとは?

nginxの基本的な特徴は以下の記事にまとめています。

nginxで使うファイル名と保存先

以下のようになります。

スクリーンショット 2024-04-17 13.07.02.png

dockerで見るとerror.log、重くてみれないんですよね...
/user/share/nginx/html//var/www/html/は他サービスとの共有フォルダみたいなイメージを持っています。

nginx.confの解説

基本的なconf設定について解説していきます。

nginx.conf
server {
    # 80番ポート(http)でリクエストを受け付ける
    listen       80;
    # ドメイン名の指定
    server_name  localhost;

    location / {
        # リクエストされた際にドキュメントがある場所を指定
        root   /usr/share/nginx/html;
        # リクエストを受けた際に提供するファイル名
        index  index.html index.htm;
    }

    # エラーコードが発生した際に表示するURIの指定
    error_page   500 502 503 504  /50x.html;
    # "/50x.html"ページへ内部リダイレクト
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

listen

ipアドレスやポート番号、unixドメインソケットを設定できます。

ipアドレスを指定する際は、以下のように設定できます。

listen IPアドレス:ポート番号;

ipv6の場合は、角括弧で囲みます。

listen [2001:db8:dead:beef::1]:80;

ポート番号で設定する際は以下のように設定します。

listen ポート番号;

unixドメインソケットの場合は以下です。

listen unix:/var/run/nginx.sock;

server_name

アクセスする際のホスト名と一致したserver_nameの設定が適応されます。

一つのサーバーだけを指定する際は以下のように記載します。

server_name example.com;

複数のサーバー名を記述する際には次のようにします。

server_name example.com www.example.com;

サブドメインにすべて一致させる場合は以下のようにします

server_name *.example.com;
server_name .example.com;

location

URIのパス毎の設定ができます。このパスの条件に一致した場合に、location以下の設定が適応されます。

location / {
    root   /usr/share/nginx/html;
    index  index.html index.html;
}

プレフィックス

locationでは、URIのパスの前に4種類のプレフィックスをつけることができます。

スクリーンショット 2024-04-17 15.19.59.png

また、優先順序もありますが、ここでは扱いません。
以下の記事が詳しく説明しています。

root

ドキュメントルートのディレクトリを指定します。上記の例では/usr/share/nginx/htmlがドキュメントルートとなります。

index

リクエストのURIが"/"で終わっている時にindexとして使われるファイル名を指します。
デフォルトの設定値はindex index.html index.htm;であり、index.htmlパスに追加され、そのパス内部へリダイレクトします。

次のような設定では、リクエストパスが"/example/"の際にindex.htmlというファイルが存在すれば、/example/index.htmlに内部ダイレクトします。index.htmlが存在せず、index.phpが存在すれば、/example/index.phpに内部ダイレクトします。

設定の一番右に、"/"で始まるファイル名のパスを書くと、ファイルが存在しなかったときにフォールバックするURIのパスになります。index.htmlやindex.phpが存在しなかったら、/index.phpにリダイレクトします。

location /example/ {
    index index.html index.php /index.php;
}

error_page

error_page コード ... [=[レスポンスコード]] uri;

コードには300〜599までの数値を記述できます。

リダイレクト先には、外部のURIを指定することもできます。

error_page 500 502 503 504 http://example.jp/sorry.html;

また、アクセス制限により、アクセスが拒否された場合に表示するページを用意する場合にも使えます。

error_page 403 /forbidden.html
location = /forbidden.html {
    internal;
    allow all;
}

IPアドレスによる制限

ファイアーウォールで制御するIPアドレスですが、nginxでも同様のことができます。

location / {
    deny   <deny ip address>;
    allow  <allow ip address>;
    deny   all;
}

以下の例だと、許可されているIPアドレス以外からのアクセスでは、403というステータスコードが表示されてアクセスできません。

location /secret-page {
    deny all
    allow <allow ip address>;
    root /var/www/html/secret;
    index index.html
}

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2