Предложение по разработке RETS PHP Tunnel
Я частично разработал сайт недвижимости, который извлекает данные о свойствах из RETS IDX. Возможно, вы знаете, что RETS-сервер прослушивал порт 6103 по протоколу http. Мой сайт развернут на виртуальном хостинге, из-за которого я не могу подключиться к порту 6103. У меня есть выделенный сервер (который позволяет подключиться к порту 6103). Я хочу использовать этот выделенный сервер в качестве промежуточного уровня между моим веб-сайтом и сервером RETS IDX. Моя проблема в том, что я хочу разработать сценарий среднего уровня, т.е. HTTP Tunnel.
Мой веб-сайт будет отправлять все запросы RETS в этот туннель, который будет отправлять их на сервер RETS IDX, и его ответ будет отправляться обратно на веб-сайт в тот же момент.
port 80 port 6103
Website (shared hosting) ----------> Tunnel (Dedicated hosting) -----------> RETS Server
RETS Server также требует входа в систему, поэтому сеанс должен поддерживаться должным образом.
Я хочу иметь быстрое / лучшее решение, чтобы сделать работу. Может быть, через.htaccess или потоковый скрипт php, или может быть какой-то сторонний скрипт также может сократить мое время.
Я хотел бы услышать любую мысль или предложение у вас есть.
PS: я не могу перенести свой сайт на выделенный сервер, потому что в ближайшем будущем у меня их будет много, и они будут стоить слишком дорого.
2 ответа
Я бы лично выбрал метод обратного прокси. Это позволит вам интеллектуально пересылать запросы на основе настраиваемых критериев.
И Apache, и nginx имеют возможности обратного прокси-сервера (на самом деле это было первоначальное назначение nginx). Для Apache нужно использовать mod_proxy
в то время как nginx имеет встроенную функциональность, если вы явно не отключите его перед компиляцией.
Из этих двух вариантов я лично предпочитаю nginx, он надежный и легкий, и полностью подходит для использования. Я считаю Apache более громоздким, но если у вас уже есть Apache, настроенный на вашем выделенном сервере, вы можете использовать его вместо этого.
Прелесть использования веб-серверов для прокси в том, что они понимают базовый протокол. Они будут сохранять заголовки, изменять файлы cookie (сохранять сеансы) и правильно переводить имена хостов.
Apache Config
В обоих случаях конфигурация очень проста, конфигурация Apache выглядит примерно так:
<Location /proxy-location/>
ProxyPass /rets http://rets-server:6103/api/path
ProxyPassReverse /rets http://rets-server:6103/api/path
</Location>
Также есть опции для настройки куки, установки тайм-аутов и т. Д. Все это можно найти в документации к mod_proxy
Вы должны отметить, что это не может идти в .htaccess
файл. Он должен идти в главном конфиге сервера.
Конфигурация nginx
Одинаково просто
location /proxy-location {
proxy_pass http://rets-server:6103/api/path;
}
Опять тонны опций в документации HttpProxyModule для кэширования, переписывания URL, добавления заголовков и т. Д.
Пожалуйста , обратитесь к документации. Я не проверял ни одну из этих конфигураций, и они могут быть немного не в порядке, так как они из памяти + быстрый Google.
Убедитесь, что вы протестировали свое приложение, прокси-сервер на недоступный сервер и убедитесь, что оно правильно обрабатывает сбои, так как вы вводите другую точку отказа.
Я работаю в предположении, что вы можете настроить свой собственный выделенный сервер. Если это не так, ваши хозяева могут быть готовы вам помочь. Если нет, оставьте мне комментарий, и я постараюсь придумать более надежный вариант скручивания.
Вы можете добиться этого с помощью PHP-расширения curl.
Пример кода может быть:
$url = $_GET['url'];
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
echo $content;
Очевидно, вы должны добавить защиту, возможно, добавьте к ней защиту.htaccess /.htpasswrd.
Более полный код с поддержкой cookie и тому подобное можно найти здесь: https://github.com/cowboy/php-simple-proxy