よくあるNginxのエラーのトラブルシューティング方法
はじめに
Nginxのエラーを解決するために使用できるいくつかの方法があります。ただし、トラブルシューティングのこれらの方法は基本的なものであり、問題の原因を診断するためにはさらなる調査がしばしば必要となります。このチュートリアルを進める中で、エラー自体が解決策への鍵となる重要な情報を提供してくれます。
このチュートリアルでは、ほとんどのLinuxディストリビューションでNginxのトラブルシューティングによく使用される以下のコマンドを復習します。
- sudo cat /var/log/nginx/error.log: This is used to print a log with a list of errors and details about them.
- sudo nginx -t: This is used to check for syntax errors in your configuration file.
- systemctl status nginx: This is used to check if your Nginx service is active or inactive.
これらのコマンドについて、さまざまなNginxのエラーのトラブルシューティング方法と、それらの使用方法について詳しく学びます。
エラーログを使ってトラブルシューティングする。
Nginxからエラーが発生した場合、問題が何であるかは必ずしも明確ではありません。そのため、1つのエラーはより大きな問題や完全に別の問題に関連している可能性があります。具体的な状況によって設定も異なります。Nginxのエラーの全体像を把握するためには、以下のコマンドを実行して実行中のリストを取得してください。
- sudo cat /var/log/nginx/error.log
特権ユーザーとしてこのコマンドを実行する必要があります。ルートユーザーではなくsudoを使用できるユーザーをおすすめします。catコマンドはconcatenateの略で、ファイルの内容を読み込んで端末の出力に表示するために使用されます。この場合、catは/var/log/nginx/error.logファイルの内容を読み込んで表示します。このコマンドを実行すると、エラーのリストが出力されます。エラーがない場合は、プロンプトは空白のままです。以下はエラーログの例です。
2022/11/28 23:58:22 [emerg] 168641#168641: invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
2022/11/28 23:59:44 [emerg] 168664#168664: invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/test.do-community.com:4
2022/11/29 00:00:19 [emerg] 168701#168701: "server" directive is not allowed here in /etc/nginx/sites-enabled/test.do-community.com:6
このエラーログの出力は、遭遇している具体的なエラーに関する重要な情報を提供します。このログアイテムの最初の部分では、エラーが発生した日時とエラーメッセージの種類が詳細に記載されています。この場合、[emerg]または緊急タイプのメッセージです。ログアイテムの最後の部分には、エラーメッセージ自体と、該当する場合にはどのファイルと特定の行に見つかるかが記載されています。
エラーログを参照することは、受け取ったエラーの背景情報を得るために役立ちます。
文法エラーをチェックしています。
Nginxの中で最もよくあるエラーの1つは、設定ファイルの構文に関係しています。文字が抜けていたり、構文の構造が間違っている場合、構文が正しくないために正常に動作しません。これは、設定ファイルがさまざまなディレクティブで構成されており、正しく宣言されなければ無効になってしまうためです。構文エラーがないかどうかを確認するには、以下のコマンドを実行してください。
- sudo nginx -t
このコマンドは特権ユーザーによって実行されるべきですが、ルートユーザーではなくsudoを使用可能なユーザーを推奨します。さらに、tフラグは実際に実行する前にファイルをテストすることを示します。構文が正しい場合は、以下の出力を受け取ることができます。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
もしそうでなければ、私たちがエラーログについて共有した例と似たエラーメッセージが表示されます。構文エラーがある場合に返される出力の一例を以下に示します。
[emerg] invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
nginx: configuration file /etc/nginx/nginx.conf test failed
「設定ファイルに不足や無効な部分がないかを確認するために、常にこの構文コマンドを実行することをおすすめします。さらに、構成の変更を行った後は必ず sudo systemctl reload nginx を実行してください。これにより、Nginxが再起動され、行った変更が適用されます。」
systemctl status nginx でのトラブルシューティング
Nginxのエラーについてトラブルシューティングする際の別のオプションは、このサービスがシステム上で有効で動作していることを確認することです。インストールが不完全な場合や、サービスがオンになっていない可能性があります。以下のsystemdイニットシステムを使用したステータスチェックで、Nginxサービスが有効かどうかを確認できます。
- systemctl status nginx
もしサービスが稼働していれば、アクティブとして読み取られます(アウトプットで稼働している)。
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
Active: active (running) since Tue 2022-11-29 16:37:49 UTC; 29s ago
Docs: man:nginx(8)
Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
Main PID: 2787 (nginx)
Tasks: 2 (limit: 1116)
Memory: 3.3M
CPU: 32ms
CGroup: /system.slice/nginx.service
├─2787 "nginx: master process /usr/sbin/nginx -g daemon on; master>
└─2790 "nginx: worker process"
もしサービスが稼働していない場合、出力結果では非アクティブ(停止中)と表示されます。
○ nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
Active: inactive (dead) since Tue 2022-11-29 16:42:27 UTC; 1s ago
Duration: 4min 38.006s
Docs: man:nginx(8)
Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
Process: 2915 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/>
Main PID: 2787 (code=exited, status=0/SUCCESS)
CPU: 39ms
もしもこれが起こった場合、Nginxサービスを再起動する必要があるかもしれません。以下のコマンドを使用して再起動することができます。
- sudo systemctl restart nginx
その後、systemctl status nginx を実行して、サービスが再度アクティブになっていることを確認できます。これらの基本的な管理コマンドについてさらに学びたい場合は、当社のチュートリアルを読んでください。そこでは、Nginxプロセスの管理方法について説明しています。
その他のトラブルシューティングのヒント
Nginxのエラーのトラブルシューティングについては、わずかながら3つの方法を見てきましたが、ファイアウォールと設定に特化したさらにいくつかの例をご紹介します。
ファイアウォールの設定を調整する
Nginxをセットアップする際に、サーバーはデフォルトでポート80のHTTPトラフィックに設定されます。このポートが開放されていない場合、ウェブサイトは正常に機能しません。ファイアウォールの設定方法は、ディストリビューションによって異なる場合があります。ここでは、Uncomplicated Firewall(ufw)を使用します。ポートが開放されているかどうかを確認するには、以下のコマンドでステータスを確認できます。
- sudo ufw status
もう一度言いますが、特権を持つユーザーが必要です。そして、ルートユーザーよりもsudoを有効にしたユーザーが推奨されます。次の出力が返される場合、適切なポート80が開いており、具体的にはNginxのHTTPプロファイルがリストされています。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
もしHTTPSトラフィックを許可するために443番の追加ポートを開く必要がある場合は、ルールをリストに追加することができます。
- sudo ufw allow ‘Nginx HTTPS’
その代わりに、単一のプロファイル「Nginxフル」で両方のルールを追加することもできます。
- sudo ufw allow ‘Nginx Full’
ポートが開いているか確認するために、再度sudo ufw statusコマンドを実行してください。もしポートがリストされていれば、準備が整っています。また、ウェブブラウザーでサーバーが正常に起動しているか確認することもできます。
設定ファイルの確認
Nginxウェブサーバーを使用している場合、おそらくサーバーブロックを設定しているはずです。特に、Nginxのインストール方法に関する当社のチュートリアルに従った場合です。望むHTMLコンテンツを提供するためには、サイトの設定ブロックを設定している必要があります。以下は、ドメインに関する構成の詳細を含んだサーバーブロックの例です。
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
設定ファイルに追加または更新を行う際は、作業が終了したら必ず保存するようにしてください。もしnanoテキストエディタを使用している場合は、CTRL + X, Y、そしてENTERを押すことで保存できます。設定ファイルに関する問題を解決するための主な方法は、前述のsudo nginx -tによる構文チェックを実行し、変更を有効化するためにsudo systemctl restart nginxでNginxを再起動することです。
いつでもお好きなテキストエディタで設定ファイルを開くことで評価することができます。以下のようにしてください。
- sudo nano /etc/nginx/sites-available/your_domain
このファイルに追加する指示は完全でなければならず、正確でない場合には無効なものとしてエラーが表示されることを覚えておいてください。
結論
このチュートリアルでは、Nginxでよく遭遇する一般的なエラーのトラブルシューティング方法について、クイックリファレンスガイドを提供しました。ご記憶の通り、これらのコマンドは問題の診断の最初のステップを提供しますが、エラーをさらに調査する必要があるかもしれません。しかし、不確かな場合は、Nginxのエラーログをチェックして各エラーの詳細なエントリを確認することが常にできます。一般的なNginxのエラーのより詳しい説明に興味がある場合は、以下のチュートリアルを読むことができます。
- Common Nginx Syntax Errors
- Common Nginx Connection Errors
- Nginx SSL Certificate and HTTPS Redirect Errors