Я перезагрузил свой сервер Ubuntu сегодня утром, потому что у меня возникла ошибка, похожая на ошибку нехватки памяти (бывает иногда, но не настолько серьезная, чтобы пытаться ее исправить). Но теперь мой сайт (который раньше работал нормально) больше не доступен из браузера.
Настройка: Я запускаю сайт NuxtJS, используя pm2 для его демонизации и nginx в качестве обратного прокси. У меня есть post-receive git hook, чтобы я мог отправить данные в свой удаленный 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)
- Я попробовал проверить access.log nginx. Все мои запросы 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()
Пока что я не нашел никаких решений. Я просто сбит с толку, потому что все, что изменилось, изменилось из-за перезагрузки. Любые идеи приветствуются.
EDIT, чтобы добавить некоторые выходные данные:
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 нужно было перезапустить, когда я перезагрузил сервер.
EDIT: Это может быть из-за iptables-persistent, который, я полагаю, автоматически устанавливается на большинстве серверов? Похоже, этота же проблема, что и в этом ответе SO.