Проксирование контента через php

Konstantin
Konstantin Ostrovsky
2019-01-12 14:13:57
5

Зеркальное проксирование - это отличных способ обойти access-control-allow-origin или скрыть от пользователя реальные пути и источники данных.

В моем случае необходимостью было скрытие истинного источника данных и обход access-control-allow-origin. Так как данные с стороннего сайта загружались через JavaScript.

Для этого решено было использовать PHP, так как это самое быстрое и доступное решение, которое можно найти. (другие варианты - проксирование nginx и apache гуглите) 

И так, предположим что у  нас есть такой адрес https;//example.com/page1/article/122.

И все было бы хорошо, да только example.com не передает нужный нам access-control-allow-origin и поэтому нам не удается получить данные через JavaScript.

Проксирование будет производиться по следующей логике:

  • клиент обращается к серверу;
  • сервер обрабатывает запрос с учетом правил htaccess;
  • php выполняется и возвращает результат пользователю.

Для начала нужно создать файл .htaccess, который будет перенаправлять все запросы на файл index.php.

Options +FollowSymLinks
Options -Indexes
RewriteEngine on
RewriteBase /lorem

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Далее в файле index.php мы должны обработать входной url, послать запрос на сторонний сервер (example.com) и вернуть пользователю результат.

$path = $_SERVER["REQUEST_URI"];

header('Content-type: image/jpeg');
echo file_get_contents("https://example.com".$path);

В итоге при запросе страницы https://you-site.com/article/12 сервер вернет содержимое страницы https://example.com/atricle/12 .

Так же было найдено более интелектуальное и сложное решение на GitHub.