Как проксировать плагин на WordPress?
На вордпрессе работа с прокси предусмотрена через добавление в конфиг
define(WP_PROXY_HOST, 'айпи'); define(WP_PROXY_PORT, 'порт'); define(WP_PROXY_USERNAME, 'логин'); define(WP_PROXY_PASSWORD, 'пароль'); |
define(WP_PROXY_HOST, 'айпи'); define(WP_PROXY_PORT, 'порт'); define(WP_PROXY_USERNAME, 'логин'); define(WP_PROXY_PASSWORD, 'пароль');
Но тогда проксируется работа всего сайта.
А как можно отправлять и принимать через прокси запросы только конкретного плагина, чтобы не замедлять работу всего сайта?
(Добавление того-же кода в php-файл плагина не дало результата)
Дополнительно:
Ответы:
Переписать код плагина.
Опеределить список адресов, куда обращается плагин и черещ фильтры игнорировать прокси для них
- Цель обратная, нужно именно обращения плагина пускать через прокси, а не проксировать работу всего сайта
- veekao, механизм тот же)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Константы
WP_PROXY_HOST,WP_PROXY_PORT,WP_PROXY_USERNAME,WP_PROXY_PASSWORDдействительно проксируют HTTP-запросы WordPress глобально. Если нужно отправлять через прокси только запросы одного плагина, лучше не использовать глобальные константы, а задавать параметры прокси точечно в конкретном запросе.Если плагин использует WordPress HTTP API (
wp_remote_get(),wp_remote_post()), можно передать прокси через аргументы? В стандартном WP HTTP API явного параметра proxy на каждый запрос нет во всех транспортах, поэтому чаще делают фильтр на время конкретного запроса или используют cURL напрямую.Самый чистый вариант — если Вы контролируете код плагина, использовать cURL для конкретного внешнего API:
$ch = curl_init('https://api.example.com/data'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_PROXY => '127.0.0.1:8080', CURLOPT_PROXYUSERPWD => 'user:password', CURLOPT_TIMEOUT => 20, ]); $response = curl_exec($ch); $error = curl_error($ch); curl_close($ch);
Если нужно остаться на
wp_remote_get(), можно временно включать глобальный прокси только вокруг нужного запроса, но это плохая идея на боевом сайте: параллельные запросы могут попасть в этот же момент. В PHP-FPM один запрос изолирован, но всё равно такой код выглядит хрупко.Если внешний сервис поддерживает allowlist IP, лучше решить задачу без прокси: настроить нормальный серверный IP или использовать API-ключи. Прокси добавляет задержку, точки отказа и проблемы с отладкой.
Для плагина, который Вы не контролируете, ищите его hooks. Многие плагины дают фильтр URL, request args или transport. Тогда можно вмешаться только в нужный запрос, не затрагивая весь WordPress.
Также учитывайте безопасность: не храните логин/пароль прокси прямо в публичном репозитории или в админском поле без защиты. Лучше держать их в
wp-config.phpили переменных окружения.Итог: глобальные
WP_PROXY_*подходят только когда весь сайт должен ходить наружу через прокси. Для одного плагина используйте его hooks, отдельный cURL-запрос или свой небольшой wrapper-класс для внешнего API.