Назад | Перейти на главную страницу

Apache ProxyPass Reverse DNS - пересылать все исходные файлы?

У меня есть несколько сайтов в локальной сети, у которых нет доступа к Интернету. Итак, я хочу настроить одну машину, у которой есть доступ, и использовать ее в качестве обратного прокси.

Моя конфигурация apache выглядит так:

ProxyPass "/website1" "http://192.168.0.1/website1"
ProxyPassReverse "/website1" "http://192.168.0.1/website1"

Поэтому, когда я получаю доступ к своему общедоступному домену / веб-сайту 1, он перенаправляет меня на веб-сайт 1, но когда я нажимаю что-то там, что перенаправляет меня на что-то вроде / website1 / about, это не работает, потому что исходный код по-прежнему говорит, что нужно перейти на http://192.168.0.1/website1/about, что, очевидно, невозможно из-за пределов локальной сети.

Итак, как мне заставить Apache пересылать все файлы и переписывать пути?

Или еще лучший вопрос: есть ли что-то лучше, чем apache для обратного прокси?

полная конф: http://pastebin.com/Mhuv7YzM

У вас есть два варианта в зависимости от того, что делает ваш сервер.

Если внутренний сервер изменяет html-ссылки с именем запрошенного хоста, вы можете просто добавить:

ProxyPreserveHost on

Если вы хотите изменить содержимое "фиксированных" ссылок htmnl внутри ответов, вам также понадобится "mod_proxy_html"функциональность, которая является специфическим для этого подмодулем mod_proxy.

mod_proxy_html

Я сейчас просто использую nginx, он работает безупречно.

sub_filter_types        text/css;
sub_filter_once         off;
sub_filter              '192.168.0.1'  'proxy.mydomain.com';
proxy_set_header        Accept-Encoding "";

location /website1 {
    proxy_pass              http://192.168.0.1/website1;
}

location /website2 {
    proxy_pass              http://192.168.0.2/website2;
}

может вы даже захотите использовать кеширование для более быстрого доступа, тогда добавьте это:

proxy_cache_path /var/www/cache levels=1:2 keys_zone=nginx:10m;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 10m;
proxy_cache nginx;

просто убедитесь, что вы создали путь / var / www / cache или установите другой существующий

Вы этого не сделаете. ProxyPassReverse предназначен только для перезаписи перенаправляет, а не пути в теле файлов. Это потребует в значительной степени полного знания формата содержимого, такого как HTML, SOAP и т. Д., Чтобы знать, где следует ожидать и заменять пути (например, в <a href="..."> для HTML, но также <link>, <script>,…).

Что вы, вероятно, захотите сделать, это просто настроить разные vHosts для разных веб-сайтов с обратным проксированием, чтобы не переписывать относительные пути. Конечно, если некоторые ссылки содержат домен (что, кажется, так и есть, если я правильно понимаю ваш вопрос), это тоже не сработает, и вам «просто» нужно настроить веб-сайт на внутреннем хосте для использования правильное, внешнее доменное имя в ссылках.

Вы забыли включить "RewriteEngine". Убедитесь, что вы включили mod_proxy, mod_proxy_http и mod_rewrite.

Добавление этого, вероятно, решит эту проблему.

    ProxyRequests off
    RewriteEngine on
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

А также эта строка должна выглядеть так:

ProxyPass "/website1" "http://192.168.0.1/website1"
ProxyPassReverse "/website1" "http://192.168.0.1/website1"
RewriteRule ^/website1$ http://%{HTTP_HOST}/website1 [L,R=301]