サイトアイコン ITC Media

【Nginx】confファイルの書き方|実例付きでわかりやすく解説

(最終更新月:2023年8月)

✔当記事は以下の疑問を解消したい方にぴったりです

「nginx confを理解したいけど、どこから学び始めるべきか?」

「nginx confの設定方法を知りたい」

「実際のnginx confの設定例を見てみたい」

✔当記事を読むと得られる知識

当記事では、nginx confの基礎から始まり、設定方法や応用までを詳細に解説していきます。

ぜひ最後までご覧ください。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

nginxとその基本ルールの理解

こちらでは、nginxとその基本ルールについてお伝えしていきます。

nginxとは?

nginxは、高性能なWebサーバーソフトウェアで、高い並行接続処理能力を誇ります。

大規模なトラフィックを持つサイトでは、nginxを利用することで、応答速度の向上やリソースの効率的な利用が可能です。

多くの企業や個人開発者が採用しており、その人気は高まりつつあります。

nginx conf ファイルの基本ルール

nginxの設定は、主にnginx.confファイルでおこなわれます。

このファイルは、各種ディレクティブを用いてサーバーの動作を制御するものです。

正確な設定が重要で、誤った設定はサーバーの動作不良を引き起こす可能性があるため、慎重に設定する必要があります。

設定開始:nginx confの設定法

こちらでは、nginx confの設定法についてお伝えしていきます。

初期設定状態の理解

nginxを初めてインストールした際には、デフォルトの設定ファイルが用意されています。

この初期状態では基本的なWebサービスが提供されますが、実際の運用には各項目のカスタマイズが必要となるでしょう。

例として、デフォルトでは80番ポートが開かれていますが、SSLを利用する場合は443番ポートも開く必要があります。

$ cat /etc/nginx/conf.d/default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

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

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

設定ファイルのディレクティブとコンテキスト

nginxの設定ファイルは、以下で構成されています。

例えば、httpコンテキストの中にはHTTP関連の設定が、serverコンテキストの中には各サーバーの設定が入ります。

初期設定では、httpコンテキストは、/etc/nginx/nginx.confで確認できます。

serverコンテキストは、/etc/nginx/conf.d/default.conf内です。

実際の設定例:目的ごとの設定方法

こちらでは、目的ごとのnginx confの設定方法を詳しく説明します。

一般的な設定

一般的な設定として以下をご覧ください。

ユーザ指定方法

nginxでは、実行ユーザを指定できます。

これによりセキュリティの強化が可能です。

userディレクティブを使い、特定のユーザとしてnginxプロセスを実行します。

一般的には、非特権ユーザで実行するのがおすすめです。

user nginx;

パフォーマンス調整法

パフォーマンスの調整は、nginxの重要な側面といえます。

システムリソースに応じた最適なパフォーマンスが得られるからです。

worker_processesディレクティブを使用して、プロセス数を調整します。

例えばCPUコア数に合わせてプロセス数を設定すると、負荷の分散が可能です。

worker_processes auto;

エラーログの設定

エラーログの設定は、問題の特定と解決に不可欠です。

error_logディレクティブを使うことで、ログの出力先とログレベルを指定できます。

error_log /var/log/nginx/error.log warn;

警告レベル以上のエラーが記録されます。

Webサーバ設定

Webサーバーとしての設定をご覧いただきます。

アクセスログ設定

アクセスログは、サイトへの訪問を記録する重要な要素です。

access_logディレクティブを使用して設定します。

access_log /var/log/nginx/access.log combined;

この設定により、アクセス情報が指定したファイルに記録されます。

仮想サーバの構築

nginxでは、ひとつのサーバーで複数のドメインを運用する仮想サーバが構築できます。

serverブロックを使用することで設定可能です。

server {
    listen       80;
    server_name  example.com;
    location / {
        root /var/www/example.com;
    }
}

この設定により、example.comへのアクセスを指定したディレクトリにルーティングします。

IPフィルタリングや認証の設定

セキュリティ対策としてIPフィルタリングや認証設定が重要です。

IPフィルタリングの例はこちら。

allow 192.168.1.0/24; deny all;

これにより指定したIP範囲からのアクセスのみを許可します。

認証の例です。

location /secure/ {
    auth_basic "Administrator Login";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

これにより、指定ディレクトリへのアクセスにパスワード認証が求められます。

SSLに対応する方法

SSL設定は、データの暗号化とセキュリティの強化に必要です。

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    ...
}

この設定により、SSL証明書を用いて通信が暗号化されます。

Rewriteルールの設定法

URLの書き換えやリダイレクト設定は、rewriteディレクティブでおこなえます。

rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;

この設定により、/oldpath/から始まるURLを/newpath/にリダイレクトが可能です。

よくある疑問と解説

こちらでは、nginxとnginx confに関するよくある疑問とその解説をおこないます。

nginxと.htaccessの違い

nginxは、Apacheとは異なり、.htaccessファイルを使用しません

全ての設定をnginx.confに記述します。設定の一元管理が可能です。

Apacheでの.htaccessのリダイレクト設定をnginxでは、上述のrewriteディレクティブでおこないます。

nginx confの制御構文解説

nginxの設定ファイルには、いくつかの制御構文が存在します。

ifディレクティブによる条件分岐があります。

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}

この設定により、ユーザーエージェントがMSIEの場合にURLを書き換えます。

エラー解決と最適化:問題対策とベストプラクティス

こちらでは、nginx confのエラー解決と最適化についてお伝えしていきます。

よくあるエラーとその対処法

nginxの設定においては、エラーが発生します。

502 Bad Gatewayエラーなどです。

このエラーは、バックエンドサーバーへの接続問題が原因で発生するもの。

対処法として、proxy_passの設定を確認したり、バックエンドサーバーの状態を確認しましょう。

nginx confのベストプラクティス

効果的なnginx設定には、ベストプラクティスの遵守が重要です。

例としては、以下のとおり。

これらの設定により、より堅牢で効率的なWebサーバー運用が可能となります。

まとめ

当記事では、nginxとその設定ファイルであるnginx confについて学習してきました。

nginxはその柔軟性と高いパフォーマンスで多くのWebサイトに採用されており、その設定やカスタマイズは無限に広がっています。

手始めに基本設定から始め、徐々に複雑な設定に挑戦することで、あなたのWebサーバーをより強固で効率的に運用できるでしょう。

これからのWebサーバー運用が、この記事を通して少しでもスムーズに進むことを願っています。

モバイルバージョンを終了