ウェブサイト検索

一般的なNginx接続エラー


紹介

Nginxは、インターネット上で多くの大規模でトラフィックの多いサイトをホストできる人気のウェブサーバーです。Nginxの接続エラーは、多くの可能な原因や解決策があるため、デバッグが困難です。さらに、エラーを修正するための正しい方向を指し示すヒントが常にあるわけではありません。これらのエラーの性質上、そもそもNginxとの接続を確立できないことに関係しているため、これらのエラーは通常、Nginx特有のエラーとしてではなく、ブラウザレベルで表示されます。実際、Nginxに関する多くの一般的なエラーは、ポートやファイアウォールなど、接続に関する何らかの側面に関係しています。

このガイドに掲載されている例は、Ubuntu 22.04 サーバーでテストされましたが、ほとんどの Nginx インストールに適用できるはずです。これらのエラーの多くは、Nginx の標準化された設定ファイルの範囲内で解決できますが、ディレクトリやパスはわずかに異なる場合があります。

このチュートリアルでは、ブラウザ接続エラーがあなたのNginxウェブサーバーにとって何を意味するか、そして問題を特定し修正するために取ることができるさまざまな手順について学びます。サーバーを再稼働させるために。

Nginxエラーログの検査

このチュートリアルで提示されているエラーと解決策は一般的なケースですが、網羅的ではありません。構文エラーがNginxが有効なステートメントとして認識する構造を壊す性質のため、以下のエラーはNginxの応答方法に関する指針に過ぎません。しばしば、1つのエラーが別のエラーを引き起こすことがあり、エラーはより大きな問題や別の問題の兆候であることがあります。あなたの特定の状況や設定は異なる場合があります。

常にNginxエラーログを参照して、エラーの実行リストを表示できることに注意してください:

  1. sudo cat /var/log/nginx/error.log

「このサイトに接続できません」というエラーの対処法

オンラインでブラウジングしていると、サイトにアクセスできませんというメッセージが表示されたWebページに遭遇することがあるでしょう。この問題には潜在的に多くの原因が考えられますが、このチュートリアルではNginxを設定しているユーザーの視点から一般的なエラーに焦点を当てます。ブラウザを更新することで問題が解決することもありますが、自分自身のWebサーバーの場合、バックエンドでサーバーの接続に影響を与える他の要因があるかもしれません。

ここにあなたのウェブブラウザで受け取る可能性のあるエラーメッセージの例があります:

このサイトにアクセスできませんというエラーメッセージがウェブブラウザに表示されます

始める前に、このエラーがあなたのウェブサーバーについて何を言っているのかを話し合いましょう。まず、example.com アドレスが応答するのに時間がかかりすぎているため、メッセージの最後にERR_CONNECTION_TIMED_OUTが参照されています。ただし、これはブラウザレベルのエラーであり、あなたのNginxサーバーからの直接のエラーではないことを覚えておいてください。このエラーメッセージは、あなたのサーバーへの接続が確立できない可能性のある原因として解釈できます。さらに、ここで提案された解決策は、クライアントサイドのエンドユーザーの視点から提供されています。

再度言いますが、これは自分のウェブサーバーを運営しているシナリオであり、インターネット上の特定のウェブサイトを訪れているわけではありません。問題を真に診断するためには、考えられる原因のリストを使って除外法で自分自身のNginx設定を確認する必要があります。

Nginxを使用しているため、このエラーの原因となっている可能性のあるいくつかの項目を特定するために、特定のコマンドを実行し、ファイアウォールや設定を確認することができます。

Nginxウェブサーバーがアクティブであることを確認する

最初にできるステップは、Nginxがシステムでアクティブであり、インストールに問題がなかったことを確認することです。これを確認するには、systemdイニットシステムを実行して、あなたのマシン上で実行中のNginxサービスのステータスをチェックしてください:

  1. 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)」と表示されるでしょう。

注意: 出力が inactive (dead) を返す場合は、sudo systemctl start nginxを使用してサーバーを再起動してみてください。最近設定変更を行った場合は、sudo systemctl reload nginxを実行して設定をリロードし、その後再度状態を確認してください。このことについては、さまざまなNginxプロセスを管理する方法を説明したチュートリアルで詳しく学ぶことができます。

Nginxサービスが実行中であることを確認したら、ブラウザにhttp://example.comとしてサーバーアドレスを再度入力して、接続の問題がまだ続いているかどうかをテストできます。IPアドレスが不明な場合は、icanhazip.comツールを使用してIPアドレスを特定できます:

  1. curl -4 icanhazip.com

この時点でまだサイトにアクセスできない場合は、次のステップとしてファイアウォールの設定を確認してください。

ファイアウォール設定の確認と調整

Webサーバーの接続を確認するために取ることができるもう一つのステップは、ファイアウォール設定が適切に構成されて、適切なポート接続を介してリクエストを受け付けるようになっているかを確認することです。もしそうでない場合は、ポートへの接続を許可するようにファイアウォール設定を調整する必要があります。デフォルトでは、Nginxウェブサーバーはポート80で受信リクエストをリッスンし、SSL証明書が設定されている場合はポート443で安全な接続をリッスンします。ただし、このチュートリアルの目的のために、デフォルトのポート80に焦点を当てます。

この例では、Ubuntu 22.04とアンコンプリケイテッドファイアウォール(UFW)を使用しています。特定のディストリビューションによっては異なる場合があることに注意してください。最初に、ファイアウォールの現在の設定を確認してください。次のコマンドをrootユーザー権限で実行する必要があることに注意してください。ここでは、sudo権限を持つユーザーを使用することをお勧めします:

  1. sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

この出力は、このマシン上の現在のオープンポート接続をリストします。残念ながら、ポート80はリストに含まれていないため、Nginxへのアクセスを許可するために追加する必要があります。使用可能なアプリケーションの設定が不明な場合は、ufw app listを実行できます。

  1. sudo ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Nginxが正常にインストールされたので、これは設定可能なさまざまなNginxプロファイルの一覧です。これらの各プロファイルが何を意味するのかの簡単な概要は以下の通りです:

  • Nginx Full: ポート 80(通常の暗号化されていないトラフィック)とポート 443(TLS/SSL暗号化トラフィック)の両方を開きます。
  • Nginx HTTP: ポート80のみを開く
  • Nginx HTTPS: ポート443のみを開く

接続を適切に構成するにはポート 80 を開くだけで済むので、次のコマンドで Nginx HTTP アプリケーションを追加できます:

  1. sudo ufw allow 'Nginx HTTP'

注意:ファイアウォールの設定を調整する際には、設定したトラフィックを許可する最も制限の強いプロファイルを有効にすることをお勧めします。これはあなたのニーズによります。この例では、ポート80のためにNginx HTTPのトラフィックを許可していますが、ポート443のためにNginx HTTPSを設定する方法についてもっと学びたい場合は、Let’s Encryptを使用したNginxのセキュリティに関するチュートリアルをお読みください。

このコマンドが成功すると、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設定ファイルの検証

ウェブブラウザをテストする前に、サーバードメインブロックがポート80でリッスンするように設定されていることを確認するために、構成設定をチェックすることをお勧めします。Nginxの構成において適切なポートとIPアドレスを設定することは重要であり、ファイアウォールで適切に開かれたポートと組み合わせる必要があります。任意のコンポーネントが欠けていると、接続は失敗します。

お好みのテキストエディタでNginxの設定ファイルを開くことができます。ここではnanoを使用します:

  1. sudo nano /etc/nginx/sites-available/example.com

ファイルが開かれると、最初の数行はlistenディレクティブで構成されています:

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アドレス情報を含めることもできます。ただし、この特定の例では、ドメインへの接続はrootパスおよびserver_nameディレクティブによって表されています。前述のように、この設定ファイルではドメインまたはIPアドレス情報が正確であることを確認する必要があります。そうでないと、機能しません。したがって、接続したいドメインに対してrootおよびserver_nameディレクティブが正確であることを再確認してください。

listen ディレクティブの設定がポート 80 に正しく設定されていることを確認した後、ファイルを保存して閉じることができます。nano を使用している場合は、CTRL + X を押し、次に Y と ENTER を押すことでこれを行うことができます。

構成ファイルに構文エラーがないことを確認するために、以下を実行してください:

  1. sudo nginx -t

設定ファイルに変更を加え、コマンドを実行後に構文エラーが表示されなかった場合は、sudo systemctl restart nginxを使用してNginxを再起動し、変更を有効にしてください。

これを行った後、ブラウザを開いてhttp://example.comに移動します。次のウェブページが表示される場合、ポート80のリクエストを受け入れるためにファイアウォールの設定が成功したことになります:

これは、あなたのウェブブラウザでNginxウェブサーバーが正常にインストールされたことを確認するメッセージです。

このウェブページは、Nginxウェブサーバーが正しくインストールされ、動作していることを確認します。

結論

このチュートリアルでは、Nginxサービスがアクティブであるかどうかを確認し、Nginxウェブサーバーを使用しているときに一般的なこのサイトにアクセスできませんエラーを引き起こす可能性のあるファイアウォールやポート接続について学びました。Nginxについてさらに学びたい場合は、タグ付きのコミュニティページをチェックするか、Ubuntu 22.04にNginxをインストールする方法を学ぶことができます。

関連記事: