У меня есть несколько сайтов в локальной сети, у которых нет доступа к Интернету. Итак, я хочу настроить одну машину, у которой есть доступ, и использовать ее в качестве обратного прокси.
Моя конфигурация 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.
Я сейчас просто использую 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]