Шлю очередные лучи поноса криворуким чешским программерам из Eset. На этот раз пришлось конкретно помудохаться с обновлениями NOD-а через redirect-ы. Задача вроде и простая. Есть сервер обновлений в датацентре. Если на него пришли из локальной сети, то перенаправить клиента отдачей кода 302 на другой сервер, который находится в той же локальной сети, с целью экономии трафика и разумного использования bandwidth. Дык не тут-то было.
Обновлятор изначально на сервере запрашивает "GET /update.ver". Ну я недолго думая и прописал в своем NginX
rewrite ^ http://my.server.local$request_uri?;
После чего убедился, что ни фига это не помогает. Редирект срабатывает, клиент загружает update.ver с локального сервера, но дальше дело не идет.
Долго думал, ломал голову. Оказывается, апдейтер NOD-а намного кривее, чем я себе изначально представлял. И после редиректа он почему-то начинает отсчитывать папки "как будто от корня". То есть, в таком варианте, следующий запрашиваемый файл по мнению Nod updater должен иметь такой URL: "http://my.server.local/update.ver/nod2A62.nup". Понятно, что ничего похожего там просто нет. Ок, почесал репу, сделал вот так:
rewrite ^ http://my.server.local/?;
Упс, опять облом. На этот раз редирект срабатывает, апдейтер идет в корень ("GET /") на локальный сервер, но не может найти там "update.ver". И тогда меня осенило. На локальном сервере сделал
index update.ver;
Вот так мы победили сырость. ©
Таким образом, "глобальный" сервер в ответ на запрос "update.ver" выдаёт редирект в корень локального сервера. А локальный сервер в ответ на запрос корня выдает свой "update.ver" в качестве индексного файла. Чума! Но это ж надо так криво соорудить апдейтер. Логикой там даже и не пахнет.
Я уже давно плююсь от этого NOD-а. Но пока так и не решил что может быть лучше. Касперского просьба не предлагать. Про Symantec Endpoint Protection знаю, но пока не тестировал его в корпоративной среде. Посмотреть в его сторону что ли...