Новое Распределяем каналы MAX по категориям и территориям. Читать новость

🧑‍💻 Чужой плагин можно развернуть на свой сервер, не трогая его код



На двух сайтах у меня картинки жмёт Robin Image Optimizer. В какой-то момент он перестал доставать до своего API. Плагин стоит, настроен, в админке ошибка, конвертации нет.

Варианты, которые приходят в голову первыми, все плохие:

🟣 форкать чужой плагин: боль на каждом обновлении

🟣 менять оптимизатор: половина библиотеки уже обработана, статистика поедет

🟣 писать в поддержку и ждать

Я сделал четвёртое. И оно работает с любым плагином, а не только с этим.

🌟 Штука, про которую забывают

WordPress гоняет все исходящие запросы через свой HTTP API. А там есть фильтр pre_http_request, который срабатывает ДО отправки запроса.

Это значит: ты перехватываешь чужой запрос и выполняешь его сам. По другому адресу. Плагин об этом не узнает.

add_filter('pre_http_request', function($preempt, $args, $url) {
if (strpos($url, 'dashboard.robinoptimizer.com') === false) {
return $preempt;
}
$url = str_replace('https://dashboard.robinoptimizer.com', MY_PROXY, $url);
return wp_remote_request($url, $args);
}, 10, 3);

Дальше на VPS, с которого API доступно, поднимаешь обратный прокси на nginx. И там есть деталь, ради которой всё и затевалось:

➖ proxy_set_header X-Forwarded-For "";
➖ proxy_set_header X-Real-IP "";

Почти все мануалы по nginx учат ровно наоборот: прокидывай реальный IP клиента. Здесь это убило бы смысл целиком. Заголовки надо стирать.

🌟 Что ещё пришлось подменить

Одного адреса мало. Бесплатный тариф отдаёт JSON со ссылкой на готовый файл, и ссылка эта ведёт на исходный домен. Не перепишешь её в ответе, плагин пойдёт качать напрямую и снова упрётся в стену.

Итого мост подменяет три вещи: адрес запроса, ссылки в теле ответа, проверку сертификата (если он самоподписанный).

🌟 Грабли, на которых я посидел

Секретный путь прокси светится в логах самого оптимизатора открытым текстом. То есть он лежит в бэкапах сайта. Кто получил бэкап, получил твой прокси. Закрывай его по IP через allow/deny, а не одним секретным путём.

И за сутки на открытый порт прилетает больше сотни запросов от сканеров. Находят быстро.

🔗 Код и конфиг nginx: github.com/boris0024/robin-proxy-bridge

Хост API там вынесен в фильтр. Меняешь одну строчку, и мост работает для любого другого сервиса, до которого твой сервер не достаёт.

Подробный разбор с конфигом nginx целиком, разбором почему не подходит встроенный WP_PROXY_HOST и граблями, на которых я посидел: в статье на vc.ru

#WordPress@robotseo #nginx@robotseo #SEO@robotseo #автоматизация@robotseo
Просмотры: 21
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти