Как проксировать плагин на WordPress?

Ссылка скопирована
1 ответ

На вордпрессе работа с прокси предусмотрена через добавление в конфиг

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, механизм тот же)
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Mobile-редакция Ответ

Константы 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);

$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.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно