Поднимаю свой скрипт для обхода ограничений CBR.RU по IP
Введение
Захожу я как-то в админку своего интернет-магазина на OcStore (форк OpenCart) и вижу подобную картину.

Иду разбираться и вижу, что для загрузки валют ocStore обращается по адресу https://www.cbr.ru/scripts/XML_daily.asp. Открываю ссылку в браузере

Сервер, как и я, находится в Азербайджане. Дело – дрянь плохо. Искать нового поставщика подобных данных желания нет, да и не факт, что миграция пройдет без проблем. Вспомнил, что как-то для доступа на российские сайты после общеизвестных событий взял себе сервер в Королеве для OpenVPN. Захожу через него на сайт CBR – всё работает, а значит блокировка происходит по IP. Решил создать свой прокси-скрипт для доступа на сайт CBR на свободном домене. Собственно, об этом и пост.
Установка NGINX
Для начала направил A запись свободного домена (http://cbr.javidan.ru) на IP сервера. Далее, залогинился по SSH на сервер.
Обновил список репозиториев
sudo apt‑get update
Установил nginxsudo apt-get install nginxПроверил, работает ли nginxsudo systemctl status nginx
Проверил правила для брандмауэра UFWsudo ufw app list
Разрешил NGINX в UFWsudo ufw allow ‘Nginx Full'
Перезагрузил UFWsudo ufw reload
Открыл ссылку на домен в браузере и увидел приветствие NGINX:

Установка PHP 8.2
Для установки PHP 8.2 на Ubuntu 20.04 сначала надо добавить специальный репозиторийsudo add-apt-repository ppa:ondrej/php
sudo apt update
Теперь можно установить PHP и нужные модули:sudo apt install php8.2 php8.2-cli php8.2-curl php8.2-mbstring php8.2-xml
Для работы PHP с NGINX установил PHP-FPMsudo apt install php8.2-fpm
Проверил работу php php -v
Создание конфигурации для nginx
В папке /var/www создал директорию для поддомена /var/www/cbrmkdir /var/www/cbr
Отключил defaultный сайт nginx:rm /etc/nginx/sites-enabled/default
Создал конфиг для нового сайтаtouch /etc/nginx/sites-available/cbr.conf
Отредактировал содержимое с помощью nanonano /etc/nginx/sites-available/cbr.conf
и написал следующее содержимое:
server{
listen 80;
root /var/www/cbr;
index index.php;
autoindex off;
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
}Включил сайт:ln /etc/nginx/sites-available/cbr.conf /etc/nginx/sites-enabled
Перезагрузил сервер nginxsudo systemctl restart nginxСоздал папку /var/www/cbr/cache, в которую PHP будет сохранять кэшированную информацию с сайта ЦБ РФ:mkdir /var/www/cbr/cache
Дал необходимые права для этой папкиsudo chown -R www-data:www-data /var/www/cbr/cache
Создание скрипта
Создал в папке /var/www/cbr файл index.phptouch /var/www/cbr/index.php
Ну и, написал подобный скрипт:nano /var/www/cbr/index.php
<?php
//узнаем дату
$today_date = date("Y-m-d");
$cache_key = $_SERVER["DOCUMENT_ROOT"]."/cache/cache-$today_date.cache";
//проверим, существует ли у нас в кэше файл на эту дату,
//если информация закеширована - выдать её, если нет - запросить у ЦБ РФ.
if(!is_file($cache_key)){
//С помощью CURL запросим информацию у ЦБ РФ
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://www.cbr.ru/scripts/XML_daily.asp');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
$response = curl_exec($curl);
curl_close($curl);
//Закешируем
file_put_contents($cache_key,$response);
}
//Прочитаем данные из кэша
$file_content = file_get_contents($cache_key);
//Отправим заголовок с уточнением кодировки XML
header('Content-Type: text/xml; charset=windows-1251');
echo $file_content;
Осталось дело за малым - поменять в OcStore ссылку на ЦБ:
Ищу файл cbr.php в папке /admin/controller/extension/currency
Меняю https://www.cbr.ru/scripts/XML_daily.asp на адрес своего домена.
Ну вот и всё.