一般的なNginx接続エラー
こんにちは。
Nginxは、インターネット上で多くの大規模かつ高トラフィックなサイトをホストできる人気のあるウェブサーバーです。Nginxの接続エラーは、原因や解決策が多岐にわたるため、デバッグが難しい場合があります。さらに、エラーを修正するための正しい方向性を示す手がかりが必ずしも多くない場合もあります。これらのエラーの性質上、Nginxとの接続が確立できずにエラーが発生するため、多くの場合ブラウザレベルで表示されます。実際、Nginxに関連する一般的なエラーの多くは、ポートやファイアウォールなどの接続の側面に関連しています。
このガイドの例はUbuntu 22.04サーバーでテストされましたが、ほとんどのNginxのインストールに適用できるはずです。これらのエラーのほとんどは、Nginxの標準化された設定ファイルの範囲内で解決できますが、ディレクトリやパスは若干異なる場合もあります。
このチュートリアルでは、Nginxウェブサーバーにおけるブラウザ接続エラーの意味と、問題を特定し修正するために取るべきさまざまな手順について学びます。これにより、サーバーを復旧させることができます。
「あなたのNginxのエラーログを検査する」
このチュートリアルで示されているエラーや解決策は一般的なケースですが、網羅的ではありません。構文エラーの性質上、Nginxが認識する有効な文の構造が破壊されるため、以下のエラーはNginxがどのように対応するかを示すガイドラインに過ぎません。しばしば、1つのエラーが他のエラーに波及することや、エラーがより大きな別の問題の症状であることがあります。具体的な状況やセットアップによって異なる場合があります。
常にNginxエラーログを参照して、エラーの逐次リストを表示することができることに注意してください。
- sudo cat /var/log/nginx/error.log
「このサイトにアクセスできません」というエラーに対処する
オンラインでブラウジングをしていると、「サイトにアクセスできません」と表示されるページに出くわすことがあります。この問題の原因は様々ですが、このチュートリアルではNginxの設定を行っているユーザーの視点から一般的なエラーに焦点を当てます。ブラウザをリフレッシュすることで問題が解決することもありますが、自分自身のウェブサーバーの場合は、バックエンドでサーバーの接続に影響を与える他の要因が考えられます。
あなたのウェブブラウザで受け取る可能性のあるエラーメッセージの例をお見せします。
始める前に、まずはこのエラーがあなたのウェブサーバーについて何を言っているのかについて話し合いましょう。最初に、example.com のアドレスが反応するのに時間がかかりすぎているため、メッセージの最後に ERR_CONNECTION_TIMED_OUT が参照されています。ただし、これはブラウザレベルのエラーであり、Nginx サーバーからの直接のエラーではありません。このエラーメッセージは、サーバーへの接続が確立できない可能性のある原因として解釈することができます。さらに、ここで示される解決策は、クライアント側のエンドユーザーの視点から提案されています。
再度言いますが、これはあなたが自分自身のウェブサーバーを運営している状況で、インターネット上の特定のウェブサイトを訪れているわけではありません。本当に問題を診断するためには、推定される原因のリストを用いて、Nginxの設定を自分自身で調べるプロセスを通じて排除する必要があります。
「Nginxを使用しているので、特定のコマンドを実行し、ファイアウォールと設定をチェックすることで、このエラーの原因となるいくつかの項目にアクセスすることができます。」
あなたのNginxウェブサーバーが稼働しているかを確認します。
まず最初に行えるのは、システム上でNginxがアクティブであり、インストールに問題がなかったことを確認することです。これはsystemd initシステムを実行してマシン上で実行中のNginxサービスのステータスを確認することで、チェックすることができます。
- systemctl status nginx
あなたの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 Thu 2022-11-03 16:37:22 UTC; 1 week 4 days >
Docs: man:nginx(8)
Main PID: 3253 (nginx)
Tasks: 2 (limit: 1116)
Memory: 3.7M
CPU: 1.250s
CGroup: /system.slice/nginx.service
├─3253 "nginx: master process /usr/sbin/nginx -g daemon on; master>
└─3254 "nginx: worker process"
出力には、 “Active”という行があり、ウェブサーバーが動作しているかどうかを示しています。この例では、正常に稼働していますが、そうでなければこの行は”inactive (dead)”と表示されます。
Note
Nginxサービスが動作していることを確認したら、接続の問題がまだ続いているかどうかを確認するために、ブラウザで再びhttp://example.comとしてサーバーアドレスを入力することができます。自分のIPアドレスが確かでない場合は、icanhazip.comツールを使用してIPアドレスを特定することができます。
- curl -4 icanhazip.com
もし今の段階でもあなたのサイトにアクセスできない場合は、次のステップとしてファイアウォール設定を確認してください。
ファイアウォールの設定を確認して調整する。
Webサーバーの接続を確認するために取ることができる別の方法は、ファイアウォールの設定が適切に構成されているかを確認することです。もし適切に構成されていない場合は、ポートへの接続を許可するためにファイアウォールの設定を調整する必要があります。デフォルトでは、Nginxウェブサーバーはポート80でのすべての受信リクエストを待ち受け、SSL証明書が設定されている場合はポート443でセキュアな接続を待ち受けます。しかし、このチュートリアルではデフォルトのポート80に焦点を当てます。
この例では、Ubuntu 22.04とUncomplicated Firewall(UFW)を使用しています。注意してほしいのは、個々のディストリビューションによって異なることがある点です。まず、ファイアウォールの現在の設定を確認してください。なお、以下のコマンドを管理者権限で実行する必要があることを念頭に置いてください。そのため、sudo権限を持つユーザーを使用することをおすすめします。
- sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
この出力は、このマシン上の現在のオープンポート接続を一覧表示しています。残念ながら、ポート80はリストにありませんので、Nginxへのアクセスを許可するために追加する必要があります。利用可能なアプリケーションの設定について確信が持てない場合は、ufw app listを実行することができます。
- sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Nginxが正常にインストールされたため、設定可能なさまざまなNginxプロファイルの一覧が表示されます。以下に、それぞれのプロファイルの概要を簡単に説明します。
- Nginx Full: opens both ports 80 (normal, unencrypted traffic) and 443 (TLS/SSL encrypted traffic)
- Nginx HTTP: opens only port 80
- Nginx HTTPS: opens only port 443
80ポートを開ければ、接続の設定が正しく行われますので、以下のコマンドでNginx HTTPアプリケーションを追加できます。
- sudo ufw allow ‘Nginx HTTP’
Note
もしこのコマンドが成功した場合、”Rule added”という出力が返されます。NginxのHTTPアプリケーションがリストに追加されたことを確認するためには、sudo ufw statusで再度ステータスを確認してください。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
この出力は、追加されたNginx HTTPアプリケーションを一覧表示しており、ポート80は接続を受け付ける状態です。
Nginxの設定ファイルを確認する。 (Nginxの設定ファイルを確認してください。)
Webブラウザをテストする前に、サーバードメインブロックがポート80で受信できるように設定されているか、設定を確認することがおすすめです。Nginxの設定で適切なポートとIPアドレスを設定することは、重要であり、ファイアウォールで適切なポートが開放されていることとペアにする必要があります。どれかの要素が欠けている場合、接続は失敗します。
お好みのテキストエディタでNginxの設定ファイルを開くことができます。ここではnanoを使用します。
- sudo nano /etc/nginx/sites-available/example.com
ファイルを開くと最初の数行には、リッスン指示が含まれています。
/etc/nginx/sites-available/example.com を日本語で文章変換すると以下のようになります:
「/etc/nginx/sites-available/example.com」
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
以下の通り日本語で言い換えます。
“listenディレクティブは、サーバーがリクエストを受け付けることができるポートを指定します。また、カギ括弧で囲まれたlisten [::]はIPv6アドレスを表します。もし希望があれば、listenディレクティブの後にIPアドレス情報を含めることもできます。しかし、この具体的な例では、ドメインへの接続はルートパスとserver_nameディレクティブで表されます。先述の通り、この設定ファイルではドメインまたはIPアドレス情報が正確でなければ機能しません。したがって、接続したいドメインにおいてrootとserver_nameディレクティブが正確であることを二重確認してください。”
listenディレクティブの設定がポート80に正しく行われていることを確認した後で、ファイルを保存して閉じることができます。nanoを使用している場合は、CTRL + Xを押し、Yを選択し、ENTERキーを押すことでこれを行うことができます。
構成ファイルに文法エラーがないことを確認するために、以下を実行してください。
- sudo nginx -t
設定ファイルを変更し、実行したコマンドに構文エラーがない場合は、sudo systemctl restart nginx を使用してNginxを再起動し、変更内容を有効にしてください。
これを終えた後、ブラウザを開いてhttp://example.comに移動してください。もし以下のウェブページを受け取ったら、あなたの調整済みのファイアウォール設定はポート80のリクエストを受け入れるために成功しています。
このウェブページは、お使いのNginxウェブサーバーが正しくインストールされ、正常に動作していることを確認しています。
結論
このチュートリアルでは、Nginxサービスがアクティブであり、Nginxウェブサーバーを使用する際に一般的な「このサイトにアクセスできません」エラーの原因となるファイアウォールやポート接続を確認する方法を学びました。Nginxについてもっと詳しく知りたい場合は、タグ付けされたコミュニティページをご覧いただくか、Ubuntu 22.04にNginxをインストールする方法の学習に飛び込むことができます。