今天早上我重新啟動了我的 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 答案相同的問題。