В прошлом месяце ко мне обратился владелец небольшого интернет-магазина. Его сайт внезапно перестал открываться у всех посетителей. Он паниковал — терял деньги с каждой минутой простоя. Я подключился к серверу и начал разбираться.
Первое, что я проверил — работает ли сам сервер. Ввел ping 8.8.8.8 (это DNS Google). Ответы были. Значит, интернет на сервере есть. Следующий шаг — проверить, слушает ли веб-сервер порт 80. Команда netstat -tuln | grep :80 показала, что ничего не слушает на этом порту. Nginx упал.
Я попытался перезапустить его: sudo systemctl restart nginx. Система ответила ошибкой: "Job for nginx.service failed". Теперь нужно смотреть логи. Я перешел в папку логов: cd /var/log/nginx и открыл последний файл ошибок: sudo tail -50 error.log. Там было написано: "bind() to 0.0.0.0:80 failed (98: Address already in use)".
Кто-то занял порт 80! Я проверил, какой процесс использует этот порт: sudo lsof -i :80. Оказалось, что Apache запустился вместе с Nginx. Оба сервера хотели использовать один порт. Проблема возникла после автоматического обновления системы, которое по умолчанию установило Apache.
Решение было простым: остановить Apache и запретить его запуск:
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo systemctl start nginx
Сайт заработал через минуту. Владелец был счастлив.
Эта история учит простому: когда что-то не работает, не паникуйте. Следуйте логике: сначала проверьте базовое соединение, потом посмотрите, работает ли нужный сервис, изучите логи ошибок. Часто решение лежит на поверхности, нужно только правильно задать вопрос системе.