【Nginx】設定ファイルとは(nginx.conf、conf.d、sites-available、uwsgi_paramsなど)

時計 2021.11.29 / 時計

【Nginx】設定ファイルとは(nginx.conf、conf.d、sites-available、uwsgi_paramsなど)

本記事ではWebサーバーソフトウェアのNginxにおける、設定ファイルについて詳しく解説していきます。

設定ファイルは/etc/nginxディレクトリに格納されており、nginx.confやuwsgi_params、conf.d、sites-availableといったファイルやディレクトリが存在します。

それぞれが重要な役割を持っており、NginxでWebサーバーを構築するためにはそれぞれの役割を知っておく必要があります。

本記事を通して各設定ファイルについて学んでいきましょう。

Nginxとは

NginxとはOSS(Open Source Software)のWebサーバーソフトウェアです。

近年WebサーバーとしてNginxを利用する人が急増しています。現在ではApacheに次いで2位のシェアを誇ります。
*2020年8月にNetcraftという会社が出した調査によるとNginxがApacheを抜きシェア1位になったみたいです。

私はUbuntuにNginxをインストールし、DjangoのWebサーバーとして利用しています。UbuntuにNginxをインストールする方法は以下記事をご参照ください。

またUbuntuはラズベリーパイ(Raspberry Pi)にインストールして使っています。ラズパイにUbuntuをインストールしてみたい方は以下記事を参考にしてみてください。

Nginx:設定ファイルとディレクトリ

Nginxには複数の設定ファイルが存在します。それら設定ファイル群は下記ディレクトリに格納されています。

/etc/nginx

このnginxディレクトリには次の設定ファイルがあります。

ファイル名 説明
nginx.conf 全般の設定
uwsgi_params uWSGI設定
scgi_params SCGI設定
fastcgi_params FastCGI設定
mime.types MIMEタイプと拡張子を定義

nginxが起動すると/etc/nginx/nginx.conf設定ファイルが読み込まれ、この設定ファイルの内容に基づいた構成で起動します。

nginxディレクトリには次のディレクトリも格納されています。

  1. conf.d
  2. sites-available
  3. sites-enabled

Nginxでは独自の設定ファイルを置く用のディレクトリとして、conf.dやsites-available、sites-enabledが用意されています。

これらの利用方法については後述いたします。

Nginxのディレクトリ構成を以下にまとめます。

nginx
├── nginx.conf
├── uwsgi_params
├── scgi_params
├── fastcgi_params
├── mime.types
├── conf.d
│   └── default.conf
├── nginx.conf
├── sites-available
│   └── default
└── sites-enabled
    └── default -> /etc/nginx/sites-available/default

設定ファイル

nginx.confファイル

Nginxの設定ファイルの一つnginx.confは、Nginxの起動時に読み込まれます。
Nginxの全般的な設定が記述されており、このファイルでNginxを制御します。

nginx.confは以下のように記述されています。

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
…
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

上記nginx.confの内容を見ると、include文で/etc/nginx/conf.dディレクトリと/etc/nginx/sites-enabledディレクトリ内のファイルを読み込んでいます。

どちらのディレクトリも設定ファイルに追加設定を行いたい場合に利用します。

uwsgi_params

uwsgi_paramsはuWSGI用のパラメータ定義ファイルです。

中身は以下のようになっております。

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

uwsgi_paramsはPythonによるWebアプリケーション(DjangoやFlask)+Nginx+uWSGIの構成のときに利用されることが多いです。

uWSGIとは

uWSGIはWSGI(Web Server Gateway Interface)サーバーの1つです。役割としてWebサーバーとPythonによるWebアプリケーション(Djangoなど)を結びつける機能を提供します。

つまりuWSGIはDjangoなどのWebアプリケーションを稼働させるアプリケーションサーバーと言えます。

Webアプリケーション(DjangoやFlask)+Nginx+uWSGI構成では、ブラウザがリクエストを送りレスポンスが返るまでの流れは次のようになります。

ブラウザ <-> Webサーバー(Nginx)<-> Unixソケット <-> アプリケーションサーバー(uWSGI) <-> Webアプリケーション(Djangoなど)

Webアプリケーション(DjangoやFlask)+Nginx+uWSGI構成

ブラウザからのリクエストはNginxで受け取り、Nginxはsocketを通してuWSGIに渡します。

ディレクトリ

conf.dディレクトリ

conf.dディレクトリ内のファイルは、起動時に読み込まれるnginx.confファイルの以下include文から読み込まれます。

include /etc/nginx/conf.d/*.conf;

conf.dディレクトリには、nginx.confに追記したい設定を記述した設定ファイルを置きます。
設定ファイルの拡張子はconfです。

conf.dディレクトリに置いた設定ファイルはすべて読み込まれます。

中小規模のサイトではこのディレクトリで運用していきます。

sites-availableディレクトリ

conf.dディレクトリと同様にsites-availableディレクトリには、nginx.confに追記したい設定を記述した設定ファイルを置きます。
つまり独自の設定ファイルを置くディレクトリということです。

nginx.confファイルからsites-availableディレクトリは直接読み込まれません。nginx.confはsites-enabled内のファイルを読み込みます。

そのため独自設定ファイルの実体はsites-availableに格納し、シンボリックリンクをsites-enabledディレクトリに作成します。

conf.dディレクトリは中小規模サイトで利用しますが、sites-availableは多くのバーチャルホストを運用するような大規模サイトで利用します。

IT用語の確認

バーチャルホストとは、一台のサーバーで複数のドメインを割り当て、外部からは独立したサーバーであるかのように運用すること

ドメイン毎に設定ファイルを作成し、実際に利用するものに対してシンボリックリンクを作成します。

またsites-availableディレクトリには初めからdefaultというファイルが存在します。これはサンプルの設定ファイルという位置づけです。

## /etc/nginx/sites-available/default
# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;
       root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        location / {
                try_files $uri $uri/ =404;
        }
}
#server {
#       listen 80;
#       listen [::]:80;
#       server_name example.com;
#       root /var/www/example.com;
#       index index.html;
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}

defaulのシンボリックリンクはすでにsites-enabledディレクトリに作成されていますので、defaulの内容を変更して利用することもできます。

独自設定ファイルの作成

新たに設定ファイルを作成する場合(設定ファイルをドメイン毎に作りたい場合など)、デフォルトである設定ファイルdefaultを編集して利用することもできますし、コピーして新たな設定ファイルを作成することもできます。

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/ファイル名

defaultまたはコピー生成した設定ファイルをvimコマンドで編集し、独自設定ファイルとして作成していきます。

シンボリックリンクの作成

設定ファイルを編集したら、シンボリックリンクを作成します。
シンボリックリンクはNginxが起動時に読み取る/etc/nginx/sites-enabledディレクトリに作成します。

これにより作成した設定ファイルが読み込まれるようになります。

ln -s /etc/nginx/sites-available/ファイル名 /etc/nginx/sites-enabled/

最後にNginxを再起動することで作成した独自設定ファイルが読み込まれます。

systemctl restart nginx

sites-enabledディレクトリ

sites-enabledディレクトリにはsites-available内の独自設定ファイルのシンボリックリンクを格納します。

nginx.confの以下コードにより、sites-enabledに保存したシンボリックリンクは読み込まれるようになっています。

include /etc/nginx/sites-enabled/*;

sites-availableとsites-enabledを利用した独自設定ファイルの作成手順は以下の通りです。

  1. sites-availableにあるdefaultをコピー
  2. コピーしたdefaultを変更して独自設定ファイルを作成
  3. 作成した独自設定ファイルのシンボリックリンクをsites-enabledに作成
  4. Nginxを再起動

上記の流れで独自設定ファイルを作成できます。

まとめ

本記事「【Nginx】設定ファイルとは(nginx.conf、conf.d、sites-availableなど)」はいかがでしたか。

WebサーバーをNginxで構築するならば避けては通れないのが設定ファイルです。

これをきちんと設定できないとWebサーバーとして機能しませんので、わからない点については本サイトを通して学んでいってください。