Предложение по разработке 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

Другие вопросы по тегам