今朝、メモリ不足エラーと思われるものが発生したため、Ubuntu サーバーを再起動しました (時々発生しますが、修正を試みるほどの問題ではありませんでした)。しかし、今では、私のサイト (以前は正常に動作していました) にブラウザーからアクセスできなくなりました。
セットアップ: pm2 を使用して NuxtJS サイトをデーモン化し、nginx をリバース プロキシとして使用して実行しています。リモート git リポジトリにプッシュできるように post-receive git フックがあり、これによりアプリが再構築され、pm2 インスタンスが再起動されます。
私のサイトにはここからしかアクセスできませんサーバー内部、ターミナル ウィンドウ内。Lynx、wget、cURL はすべて機能し、HTTPS への 301 リダイレクトにも従います。また、リバース プロキシされる localhost:3000 だけでなく、ドメイン自体を要求したときにも機能します。つまり、curl https://my-domain.org
機能します。他のターミナル ウィンドウから curl/lynx/etc を試行すると、タイムアウトするまで待機します。ブラウザーでも同じで、タイムアウトするまで待機します。
私が試してみた/調べたものは次のとおりです:
- UFW を使用しているので、ファイアウォールに問題があるかどうかを確認しました。ただし、80、443、8080 はすべて ALLOW に設定されています。
- nginx が何らかの理由で listen していないかどうか確認しようとしたので、試してみました
sudo lsof -i -P -n | grep LISTEN
。その出力は次のとおりです。
nginx 2896 root 6u IPv4 668673557 0t0 TCP *:443 (LISTEN)
nginx 2896 root 7u IPv4 668673558 0t0 TCP *:80 (LISTEN)
nginx 2897 www-data 6u IPv4 668673557 0t0 TCP *:443 (LISTEN)
nginx 2897 www-data 7u IPv4 668673558 0t0 TCP *:80 (LISTEN)
nginx 2898 www-data 6u IPv4 668673557 0t0 TCP *:443 (LISTEN)
nginx 2898 www-data 7u IPv4 668673558 0t0 TCP *:80 (LISTEN)
- nginx の access.log を確認してみました。curl/wget/Lynx リクエストはすべて正常に表示されていますが、ブラウザ リクエストは表示されません。error.log も確認したところ、次のメッセージが表示されました。
2021/07/31 11:51:52 [emerg] 885#885: bind() to 0.0.0.0:443 failed (98: Address already in use)
2021/07/31 11:51:52 [emerg] 885#885: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/07/31 11:51:52 [emerg] 885#885: bind() to 0.0.0.0:443 failed (98: Address already in use)
2021/07/31 11:51:52 [emerg] 885#885: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/07/31 11:51:52 [emerg] 885#885: still could not bind()
今のところ、解決策は見つかっていません。何が変わったかは、再起動によって変わっただけなので、困惑しています。どんなアイデアでも大歓迎です。
出力を追加するために編集します:
sudo systemctl status nginx
:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-07-31 15:05:53 EDT; 27min ago
Process: 6834 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status
Process: 6840 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 6837 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 6841 (nginx)
CGroup: /system.slice/nginx.service
├─6841 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
├─6842 nginx: worker process
└─6843 nginx: worker process
Jul 31 15:05:53 parrot systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 31 15:05:53 parrot systemd[1]: Started A high performance web server and a reverse proxy server.
の出力はsudo nginx -T
長いので、要点をまとめました。
答え1
これはあまりにも馬鹿げているので、なぜ問題になるのか分かりません。これについてのご意見をいただければ幸いです。私のufw
設定は次のとおりです。
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
80 ALLOW Anywhere
8080 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
8080 (v6) ALLOW Anywhere (v6)
80 年代の冗長な部分もありますが、役立つかどうかを確認するために追加のものを追加していました。
誰かが、ufw が問題ではないことを確認するために、ufw を無効にしてみるよう勧めました。どうやら、そうだったようです。無効にすると、サイトはすぐに機能し始めました。再び機能しなくなることを覚悟で再度有効にすると、まだ機能しています。つまり、サーバーを再起動したときに、ufw に関する何かを再トリガーする必要があったのです。
編集:これはおそらくほとんどのサーバーに自動インストールされるiptables-persistentのせいでしょうか?このSOの回答と同じ問題です。