今天早上我重启了 Ubuntu 服务器,因为我遇到了一个似乎内存不足的错误(偶尔发生,但问题不大,没必要尝试修复)。但现在,我的网站(之前运行良好)无法再通过浏览器访问。
设置:我正在运行一个 NuxtJS 网站,使用 pm2 来守护它,并使用 nginx 作为反向代理。我有一个 post-receive git 钩子,这样我就可以推送到我的远程 git 仓库,然后重建应用程序并重新启动 pm2 实例。
我只能从以下位置访问我的网站在服务器内部,在终端窗口内。Lynx、wget 和 cURL 都可以正常工作,甚至可以遵循 301 重定向到 HTTPS。当我请求域本身时,它们都可以正常工作,而不仅仅是被反向代理的 localhost:3000。也就是说,可以正常curl https://my-domain.org
工作。如果我尝试从任何其他终端窗口执行 curl/lynx/etc,它只会等待超时。浏览器也是一样——等待超时。
以下是我尝试过/看过的事情:
- 我正在使用 UFW,所以我检查了防火墙是否是问题所在。但是 80、443 和 8080 都设置为允许。
- 我试着看看是不是因为 nginx 没有监听,所以我尝试了
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 的某些操作。
编辑:这可能是因为 iptables-persistent,我猜大多数服务器上都会自动安装它?看起来是与此 SO 答案相同的问题。