Я прошёл одно задание и это неожиданно были интересно. Для регистрации ничего не надо. Просто залогинился со своей учёткой от google. Открыл список заданий и решил выбрать что-то среднее. Я вроде неплохо знаю Nginx, поэтому решил с него начать.
Задание выглядит так:
◽️Scenario: "Cape Town": Borked Nginx
◽️Level: Medium
◽️Description: There's an Nginx web server installed and managed by systemd. Running curl -I 127.0.0.1:80 returns curl: (7) Failed to connect to localhost port 80: Connection refused , fix it so when you curl you get the default Nginx page.
◽️Test: curl -Is 127.0.0.1:80|head -1 returns HTTP/1.1 200 OK
◽️Time to Solve: 15 minutes.
◽️OS: Debian 11
◽️Root (sudo) Access: Yes
Вам дают на время полноценную виртуалку. По крайней мере внешне она выглядит так. Подключение к терминалу происходит прямо в браузере.
Зашёл и сразу замешкался. Я обычно не использую sudo, а тут всё только через него. Постоянно забывал написал. Нет
mc, без него навигация более долгая. Плюс, нет mcedit, надо nano использовать. Тоже непривычно, хоть и некритично. Короче, работать в незнакомом окружении неудобно.Первое, что сделал, проверил, слушает ли Nginx указанный порт:
# sudo ss -tulnpОказалось, что нет. Ну, думаю, что-то очень лёгкое задание. Запускаю Nginx:
# sudo systemctl start nginxНе стартует. Смотрю лог:
# tail -n 10 /var/log/nginx/error.logТам ошибка в конфиге
default.conf. Почему-то первой строкой стоит точка с запятой. Думаю, что-то всё равно очень просто. Убираю первую строку, перезапускаю Nginx, делаю проверку:# curl -Is 127.0.0.1:80|head -1На выходе 500-я ошибка. Тут уже интереснее. Думал, на этом задание и закончится. Оказалось, что нет. Опять лезу в лог ошибок. Там знакомое:
socketpair() failed (24: Too many open files)Смотрю
ulimit -nВроде хватает с запасом. Потом вспоминаю, что это параметры текущего пользователя, а Nginx под своим запущен. Смотрю, какие у него лимиты:
# ps ax | grep nginx850# cat /proc/850/limitsТам уже не помню вывод, но для open files было значение 10. Решил вопрос самым быстрым способом. У Nginx отдельный параметр прямо в конфиге есть для этой настройки:
worker_rlimit_nofile 65536;Я его всегда в свои конфигурации добавляю. Перезапустил Nginx и проверка прошла успешно. Можно было лимит изменить в systemd юните, или в системном
/etc/security/limits.conf для пользователя nginx.В целом было интересно. Я даже немного понервничал, так как тикает таймер обратного отсчёта. Нужно уложиться в 15 минут. Не знал, что будет, если не уложиться. Думал, что на бесплатном тарифе могут не разрешить повторить задание, а предложат либо заплатить, либо ждать сутки.
Лично мне задание показалось простым, так как кумекать особо не надо. Смотрим сервис, смотрим, конфиг, смотрим логи. Думать над проблемой не пришлось.
Интересная тема, рекомендую попробовать. Есть похожий сервис от обучающей платформы KodeKloud. Я писал о нём и тоже проходил задания. Но тут мне показалось интереснее. Если кто-то будет проходить другие задания, то расскажите, интересно было или нет.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#обучение

