重新啟動 Ubuntu 伺服器,無法再從瀏覽器存取 nginx 站點

重新啟動 Ubuntu 伺服器,無法再從瀏覽器存取 nginx 站點

今天早上我重新啟動了我的 Ubuntu 伺服器,因為我遇到了一個低記憶體錯誤(偶爾發生,但還不足以嘗試修復它)。但現在,我的網站(以前工作正常)無法再從瀏覽器訪問。

設定:我正在運行一個 NuxtJS 站點,使用 pm2 對其進行守護進程,並使用 nginx 作為反向代理。我有一個接收後 git 掛鉤,以便我可以推送到遠端 git 儲存庫,然後重建應用程式並重新啟動 pm2 實例。

我只能從以下位置存取我的網站伺服器內部,在終端機視窗內。 Lynx、wget 和 cURL 都可以工作,甚至可以遵循 301 重定向到 HTTPS。當我請求網域本身時,它們正在工作,而不僅僅是反向代理的 localhost:3000 。正如,curl https://my-domain.org有效。如果我嘗試從任何其他終端視窗執行curl/lynx/etc,它只會等到逾時。與瀏覽器相同 - 等待直到逾時。

以下是我嘗試過/看過的事情:

  • 我使用的是 UFW,所以我檢查了防火牆是否有問題。但80、443和8080都設定為ALLOW。
  • 我嘗試看看 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 答案相同的問題。

相關內容