重新启动 Ubuntu 服务器后,nginx 站点无法再通过浏览器访问

重新启动 Ubuntu 服务器后,nginx 站点无法再通过浏览器访问

今天早上我重启了 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 答案相同的问题。

相关内容