Как я могу настроить мод-прокси-сервер apache для содержимого сервера с отдельного назначенного сервера таким образом, чтобы я мог изменить, с какого сервера обслуживать контент, без перезапуска apache?
Сервер содержимого будет периодически меняться либо для обслуживания, либо из-за сбоя.
У меня есть приложение, которое не обязательно должно быть в кластере, но я хочу иметь статическую версию отображения веб-страницы в случае сбоя основного сервера приложений.
Мне также нужна возможность обновить кодовую базу на сервере, протестировать ее, а затем отключить старый действующий сервер.
Я установил mod_proxy, используя
ProxyPass / http://appserver.com
ProxyPassReverse / http://appserver.com
это работает, но требует перезапуска с другими настройками для изменения направления. что противоречит цели его использования на живом сервере.
Я также пробовал mod_balencer, который отлично работает для аварийного переключения, но требует перезапуска apache, чтобы вернуть его на обслуживание основного сервера приложений при резервном копировании.
ProxyPass / balancer://hotcluster/
<Proxy balancer://hotcluster>
BalancerMember http://dyn:80 loadfactor=1
BalancerMember http://basic:80 status=+H
ProxySet lbmethod=bytraffic
</Proxy>
Есть ли способ установить текущий сервер приложений без перезапуска apache?
Вы можете использовать mod_rewrite, используя RewriteMap с одним значением:
RewriteMap server txt:/path/to/file/map.txt
RewriteRule ^/(.*) http://${server:production}/$1 [P,L]
Затем создайте /path/to/file/map.txt с этим содержимым
# To use a different server, change appserver.com
# to e.g. maintenance.appserver.com
production appserver.com
Как только mod_rewrite обнаруживает, что вы изменили это значение, он автоматически проксирует запросы на новый сервер.
Вы можете использовать один из нескольких типов RewriteMap с различным влиянием на производительность: файлы базы данных, рандомизированные карты текстовых файлов, даже внешние программы - короче говоря, вы можете выполнять с ними все виды тайной магии. Читайте об этом в документы mod_rewrite и решите для себя, что будет лучшим вариантом.
Это должно быть возможно с помощью mod_rewrite.
Что-то вроде этого:
RewriteEngine on
RewriteCond /some/path/dynamic-server-is-down !-f
RewriteRule ^/(.*) http://dyn:80/$1 [P]
RewriteCond /some/path/dynamic-server-is-down -f
RewriteRule ^/(.*) http://static:80/$1 [P]
Затем просто коснитесь файла dynamic-server-is-down, чтобы переключиться на статический сервер.
Я не думаю, что есть простой способ сделать это. Однако, если вы ожидаете, что прокси-сервер изменится, почему бы не использовать прокси-сервер на виртуальный IP-адрес или псевдоним DNS. Таким образом, если вам нужно отключить прокси-сервер, вы можете переназначить виртуальный IP-адрес или изменить псевдоним, чтобы он указывал на новый сервер.
Вы можете попробовать «перезагрузить», а не перезапустить. Restart остановит и запустит сервер, reload просто перезагрузит конфигурацию.