Можно ли настроить Apache для разных виртуальных хостов на основе исходного IP? (т.е. тот же интерфейс, то же имя хоста, но два разных виртуальных хоста, с разным контентом, в зависимости от исходного IP.)
Мотивация для этого заключается в том, чтобы мой IP-адрес мог получить доступ к самому сайту, но чтобы все остальные получали удерживающую страницу. Традиционное решение, по-видимому, заключается в использовании mod_rewrite для направления посетителей на отдельную страницу в пределах одного и того же документа, но вместо этого я бы хотел использовать совершенно другой документ для удерживающей страницы.
apache-2.2
ip
virtualhost
ithinkihaveacat
источник
источник
Ответы:
Я не знаю, возможно ли это (без mod_rewrite, во всяком случае) на уровне Apache.
Вот еще одна идея. Что если вы настроите два виртуальных хоста Apache, а затем используете iptables для прозрачной пересылки посетителя для исправления виртуального хоста? Что-то вроде
Или что-то подобное. :)
источник
Это действительно не будет другой виртуальный хост. Но используя что-то вроде mod_rewrite или mod_alias, вы можете подавать контент из любой папки, для которой вы установили соответствующие разрешения. Есть только один докрут, но вы можете эффективно изменить это на лету.
Один из способов сделать это может быть:
Обратите внимание, что, вероятно, было бы немного чище справиться с этим с помощью поддомена dev.
источник
Apache 2.3 или более поздняя версия
С Apache 2.3 или более поздней версии вы можете сделать что-то вроде этого (протестировано):
Apache 2.2 или более ранняя версия
Обновление: это не хорошее решение. См. ниже.
Вы должны сделать взлом, как это. Обратите внимание на то,
[PT]
что означает «проход». Без этого фактическое перенаправление HTTP отправляется обратно клиенту, что, вероятно, не то, что вы хотите.[OR]
Вещь (которая выступает за «или») показывает , как сочетать несколько адресов.Вам нужно включить,
mod_rewrite
что вы можете сделать в Debian / Ubuntu с помощью этой команды:Обратите внимание, что этот метод не полностью запрещает другим людям доступ к вашему тестовому сайту, поэтому вы, вероятно, захотите добавить некоторую защиту или просто выбрать более неясный префикс, чем
next
.Обновление метода mod_rewrite.
Есть несколько проблем с этим методом. Во-первых, Django не работает с двумя сайтами в одном и том же процессе, вам нужно следовать инструкциям в этом ответе .
Во-вторых, mod_rewrite не работает с
POST
запросами ! ВсеPOST
s молча изменяются наGET
и данные поста сбрасываются. Очень расстраивает! Поэтому я рекомендую вам использовать ...версия iptables
Просто запустите серверы на двух разных портах. Этот включает в себя материал WSGI, чтобы иметь два отдельных сайта django.
Затем вы можете использовать эту
iptables
команду для маршрутизации запросов с вашего IP-адреса на порт 80 на порт 1222:Измените
-A
на,-D
чтобы удалить правило.Обратите внимание, что в документах предполагается, что вам нужно добавить дополнительные команды
Listen
иNameVirtualHost
команды, но я обнаружил, что они работают без них, и добавление их приводило к поломке (по крайней мере, в Ubuntu).источник
Alias cannot occur within <Directory/Location/Files> section
какие-либо исправления? Мне действительно нужно это: $AFAIK, единственный способ сделать это состоит в том, чтобы поместить символическую ссылку в корне документа на ваш контент вне корня документа, а затем переписать запрос на это.
источник
Как сказал @Timmmm, но исправляя оператор ipmatch (обратите внимание на '10 .10.10.10 '): ServerName www.example.com
Потому что иначе это покажет ошибку:
источник