Обход санкций иностранных компаний
В связи с санкциями многих иностранных компаний по отношению к пользователям из России очень часто не обновляются платные плагины через админку WordPress.
Это связано, в первую очередь, с блокировкой российских IP-адресов (хотя по факту не все заблокированные адреса принадлежат российским компаниям, но это отдельный разговор) такими крупными провайдерами как Amazon, на серверах которых хостится очень много платных продуктов.
Данная проблема была замечена у наших хостинг-провайдеров Бегет и Таймвеб при попытке обновления Blocksy Pro.
Решение
Для решения данной проблемы в WordPress «из коробки» есть поддержка прокси, который настраивается парой констант в конфиге вашего сайта wp-config.php:
// Адрес прокси.
define( 'WP_PROXY_HOST', '192.168.84.101' );
// Порт прокси.
define( 'WP_PROXY_PORT', 8080 );
Если ваш прокси требует авторизации, то добавляем еще пару констант:
// Имя пользователя.
define( 'WP_PROXY_USERNAME', 'username' );
// Пароль пользователя.
define( 'WP_PROXY_PASSWORD', 'password' );
Если нужно исключить какие-то хосты из проксирования, можно указать их принудительно:
define(
'WP_PROXY_BYPASS_HOSTS',
'yandex.ru,beget.com,*.wordpress.org'
);
Вам не нужно указывать localhost
и хост самого сайта в этом списке, так как они по умолчанию не проксируются. Значение должно быть представлено в виде списка, разделенного запятыми, также поддерживаются подстановочные знаки с использованием *
. Например: *.wordpress.org
.
И есть еще один несущественный минус в данном решении — поддерживаются только прокси с Basic аутентификацией. NTLM аутентификация не поддерживается.
Где взять прокси?
Свежий список бесплатных прокси вы всегда можете взять на сайте Free Proxy.
Проверка
Для проверки работы прокси, можно использовать хук отладки http_api_debug
, в нём уже сложить данные запроса в лог-файл:
function mihdan_proxy_debug( $response, $type, $class, $args, $url ) {
// Можно поменять var_dump на error_log().
var_dump( 'URL: ' . var_export( $url, true ) );
var_dump( 'Аргументы: ' . var_export( $args, true ) );
var_dump( 'Ответ: ' . var_export( $response, true ) );
}
add_action( 'mihdan_proxy_debug', 'viper_http_api_debug', 10, 5 );
И после этого сделать тестовый запрос:
$api_url = 'http://api.wordpress.org/secret-key/1.0/';
$response = wp_remote_get( $api_url );
$header = wp_remote_retrieve_headers( $response );
var_dump( $header );
В ответе поищите заголовок via:
, обычно так обозначаются прокси.
Михаил, я, конечно, не спец, но решила восспользоваться вашим кодом. Поставила в wp-config.php вот этот код:
Попробовала обновить плагин крокоблок. Выдает ошибку. Может этот код здесь не работате?
Добрый день, Елена, это какой-то локальный прокси у вас? Какую страну он выдает? Требуется ли ему авторизация? Или вы просто из примеров взяли IP адрес и порт? Тут нажно указывать настоящие живые сервера, который можно взять на этом сайте.
Этот тот адрес, который приведен в статье для примера :))
Я так и понял, но ТС молчит
Я не молчу, я отправляла коммент, посмотрите.
Где-куда?
Я писала, что живу в Германии, купила Крокоблок, но заплатила русской картой. Теперь они не дают его обновить. Я не знаток этих прокси, но как я понимаю, хостинг у меня Бегет, обычный тариф Старт. Никакой авторизации нет. Я пробовала и данные из примера и данные с сервиса, т.е. живые сервера. Если не меняю ничего, то посылает меня подальше, если ставлю один из серверов с сервиса, то просто пишет ерор и зайдите попозже (
Замена IP никак вам не поможет обойти ограничения крокоблоков, у вас русская учетка и русская карта … Смиритесь и живите дальше, возможно, лет через несколько они одумаются, но будет уже поздно
Ок. Спасибо, Михаил! Я так и подумала.
А как бы мне сделать так, чтобы wordpress стучался через прокси только к *.openai.com, а во все остальное — без прокси?
Обратная команда
WP_PROXY_BYPASS_HOSTS есть?
Можно через хук http_api_curl проверить адрес (домен), на который идет запрос и добавить именно в этот запрос прокси через: