Apache. Могу ли я создать прокси-сервер только с Apache?

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

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

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

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

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

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

Я смог переопределить это, добавив 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?


person kikito    schedule 23.02.2012    source источник
comment
См. caniuse для некоторых ссылок на документацию по настройке CORS для работы в IE8+.   -  person Quentin    schedule 23.02.2012
comment
Престижность за фактическое знание example.com   -  person Quentin    schedule 23.02.2012


Ответы (3)


Вам нужна Директива ProxyPass.

ProxyPass /proxy/news/a http://news.example.com/news/a
person Quentin    schedule 23.02.2012
comment
Спасибо, ваш ответ поставил меня на правильный путь! В конце концов, мне пришлось объединить mod_proxy с mod_rewrite, хотя я не мог заставить ProxyPass работать так, как вы там написали. - person kikito; 24.02.2012

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

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

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

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

person kikito    schedule 24.02.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>
person linuxeasy    schedule 23.02.2012