Apache - Могу ли я сделать прокси-сервер только с Apache? - PullRequest
2 голосов
/ 23 февраля 2012

У меня есть куча поддоменов на одном сервере:

  • a.example.com
  • b.example.com
  • news.example.com

Все они находятся в одном виртуальном хосте Apache.

Мне нужно использовать фид, предоставленный поддоменом новостей внутри поддоменов a и b. Каналы обычно выглядят так:

  • news.example.com / Новости /
  • news.example.com / Новости / б

На поддоменах a и b я использую функцию jjery ajax , чтобы загрузить данные из новостных лент и представить их на a и b. Изначально это не сработало из-за политики того же происхождения .

Мне удалось переопределить это, добавив Access-Control-Allow-Origin "*" в мой файл конфигурации Apache.

... но это работает только в Firefox, Chrome и Safari. Internet Explorer, похоже, игнорирует эту директиву.

Итак, мне нужно создать прокси.

Мне нужен новый каталог во всех моих поддоменах (например, /proxy), который Apache обнаруживает и перенаправляет на news.example.com, независимо от того, какой поддомен. Итак:

  • a.example.com / proxy / news / a -> вернуть содержимое news.example.com/news/a
  • b.example.com / proxy / news / b -> вернуть содержимое news.example.com/news/b

Могу ли я сделать это непосредственно в подмодулях Apache + (например, mod_rewrite) или мне нужно использовать язык сценариев, такой как PHP, для этого?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Требуется директива ProxyPass .

ProxyPass /proxy/news/a http://news.example.com/news/a
1 голос
/ 24 февраля 2012

В итоге мы смогли создать прокси, используя комбинацию из двух модулей: mod_rewrite и mod_proxy.

Синтаксис был следующий:

rewriteEngine on
rewriteRule proxy/(.+)$ http://news.example.com/$1 [P]

[P] в конце говорит о правиле «действовать как прокси» и не работает без mod_proxy. Без этого apache делает «перенаправление» (URL в верхней части страницы изменяется) вместо «просто обслуживания страницы».

0 голосов
/ 23 февраля 2012

Apache можно настроить на использование apache:

рассмотрим этот рабочий пример кода (часть прокси):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName ci.testserver.com
    ServerAlias ci
    ProxyRequests Off
    <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
        ProxyPreserveHost on
        ProxyPass / http://localhost:8080/
</VirtualHost>
...