- Nginxの設定ファイルが苦手…
- 設定ファイルの配置場所は?
このような方に向けて書きました。
Nginxを扱う上で設定ファイルを書けることが必須ですが、その前提知識として配置場所を理解しておくことは重要です。
とはいえ、Nginxの設定ファイルは以下のように構造がやや複雑。
/etc/nginx/
├── nginx.conf
├── conf.d/
│ └── *.conf
├── sites-available/
│ └── your-site.conf
├── sites-enabled/
│ └── symlink-to-sites-available
└── snippets/
└── *.conf
この複雑さが理解を難しくしています。
そこで本記事では、Nginxの設定ファイルの流れを追いつつ配置場所を説明します。
設定ファイルの基礎にあたる部分なので、記事をお読みいただければNginxの設定に対する苦手意識が少し軽減されるはずです。
Nginxの設定ファイルの作り方
設定ファイルは次の手順で作ります。
- sites-availableに設定ファイルを作成
- sites-enabledにシンボリックリンクを作成
- Nginxをリロード
実際の運用では、この3つを押さえておけば困ることはありません。
sites-availableに設定ファイルを作成
設定ファイルはsites-availableディレクトリ配下に作ります。
vi /etc/nginx/sites-available/example.com.conf
この中にNginxの設定項目を書いていくわけです。
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
実はNginxはこのsites-availableディレクトリを見にきてくれません。
つまり、設定ファイルを作っただけでは無効のままなので、次のステップで有効化します。
sites-enabledにシンボリックリンクを作成
Nginxは、sites-enabledディレクトリに設定ファイルを探しにきます。
そこでsites-enableディレクトリに、先ほど作成した設定ファイルへのショートカットを設置します。
このショートカットをシンボリックリンクと呼び、次のコマンドで作成可能です。
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
シンボリックリンクを作り終わったら、以下のコマンドで設定ファイルが正しいかを確認しましょう。
nginx -t
設定ファイルが問題なかった場合には以下のメッセージが表示されます。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
逆に、失敗した場合には以下のようなメッセージが返ってきます。
nginx: [emerg] open() "/etc/nginx/sites-enabled/example.com.conf" failed (2: No such file or directory) in /etc/nginx/nginx.conf:39
nginx: configuration file /etc/nginx/nginx.conf test failed
失敗の場合には、設定ファイル内を見直してから再度テストを行いましょう。
Nginxをリロード
テストでOKが出たら、Nginxをリロードします。
sudo systemctl reload nginx
これで設定ファイルに従ってNginxが動き出します。
Nginxの設定ファイル作成の流れ
設定ファイルは、次の流れでとらえると理解が進みます。
- nginx.confファイル
- sites-availableディレクトリ
- sites-enabledディレクトリ
- snippetsディレクトリ
このうち、設定ファイルの理解で最も重要なのが②と③です。
名前が似ていて紛らわしいですが、この二つの違いを理解することが設定ファイルの理解には必須です。
先ほどと重複する点もありますが、シンプルに解説します!
1. nginx.confの読み込み
Nginxの設定ファイルのメインとなるのがnginx.confです。
このファイルを普段意識することはありませんが、重要なファイルなので解説します。
Nginx起動時、最初に読み込まれる設定ファイルで以下のような内容です。
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# ここで sites-enabled 配下のファイルを読み込む設定がされている
include /etc/nginx/sites-enabled/*;
# 他にも conf.d/ 配下のファイルも読み込まれることがある
include /etc/nginx/conf.d/*.conf;
sendfile on;
keepalive_timeout 65;
}
重要なのはsites-enabledディレクトリを読みに行っている点です。
ここではこれだけ理解しておけば十分。
詳細はこの後、説明します。
2. sites-available に各サイトの設定ファイルを配置
サーバーに配置するサイトごとにconfファイルを配置します。
配置場所は/etc/nginx/sites-available/
です。
たとえば、example.comというサイトを設定する場合には、以下のファイルを用意します。
/etc/nginx/sites-available/example.com.conf
以下はexample.com.confの記載例です。
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
この設定ファイルでは、ブラウザからexample.comにアクセスがあった場合の挙動が定義されています。
つまり、今回の場合は以下のファイルを返します。
/var/www/example.com/index.html
ただし、このsites-availableはその名の通り「利用可能」なものを入れるフォルダに過ぎません。
実際に設定ファイルを有効化するには、sites-enabledへの登録が必要です。
nginx.confでもsites-enableは読み込み対象でしたが、sites-availabeは読み込み対象ではありませんでした。
設定ファイルが完成したら、nginx -t
コマンドで内容が大丈夫か確認しましょう!
3. sites-enabled へのシンボリックリンクを作成
Nginxが実際に読み込むのは、sites-enabledフォルダです。
そこで、sites-availableに配置した設定ファイルのショートカット(シンボリックリンク)をsites-enabledディレクトリに作成します。
Nginxはシンボリックリンクを辿って各設定ファイルを読み込むわけです。
シンボリックリンクの作成にはln -s
コマンドを実行しましょう。
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
sudo systemctl reload nginx
これでexample.comの設定ファイルが有効化されました。
example.comの設定を無効化したい場合には、ファイルの末尾に.disabled
をつけます。
sudo mv /etc/nginx/sites-enabled/example.com.conf /etc/nginx/sites-enabled/example.com.conf.disabled
sudo systemctl reload nginx
disabledを外せば、また有効化できます。
sudo mv /etc/nginx/sites-enabled/example.com.conf.disabled /etc/nginx/sites-enabled/example.com.conf
sudo systemctl reload nginx
設定を変更したらリロードをお忘れなく!
4. 共通設定の再利用(スニペット)
Nginxでは、複数のconfファイルを作ることで複数サイトを管理できます。
もし、複数のサイトで共通の設定があればsnippetsに保存して、各サイト設定ファイルから参照できます。
たとえばSSLの設定やリダイレクトのルールなどですね。
ここではSSLの設定をsnippetsに保存する場合を考えてみます。
たとえばSSLの設定をスニペットとして保存して、すべてのサイトで利用できます。
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "HIGH:!aNULL:!MD5";
これを設定ファイルで読み込む場合には、以下のようにincludeを使います。
server {
listen 443 ssl;
server_name example.com;
include /etc/nginx/snippets/ssl-params.conf;
location / {
proxy_pass http://localhost:8000;
}
}
snippetsを上手に使えば、各サイトで同じSSL設定を繰り返し書く必要がなくなり、コードが簡潔になります。
まとめ
Nginxが起動すると、まずnginx.confファイルが読み込まれます。
このファイルは/etc/nginx/sites-enabled/
配下の全てのファイルを読みに行くのでした。
ただ、このsites-enabled配下に置くのは設定ファイルではなく、設定ファイルのシンボリックリンクです。
実際の設定ファイルはsites-availableに配置します。
これは設定の有効・無効を簡単に切り替えられるための運用方法になります。
また、複数サイトで共通利用する設定はsnippetsに定義してincludeすると呼び出しもできます。
もしNginxについてさらに知りたい方は、以下の記事も参考にしてみてください。
» 参考:【Nginx入門】初心者でもわかるWebサーバーの設定ガイド
コメント