Czy można skonfigurować Apache dla różnych hostów wirtualnych w oparciu o źródłowy adres IP? (tj. ten sam interfejs, ta sama nazwa hosta, ale dwa różne hosty wirtualne, o różnej zawartości, w oparciu o źródłowy adres IP).
Motywacja jest taka, że mój adres IP może uzyskać dostęp do właściwej witryny, ale wszyscy inni otrzymują stronę wstrzymującą. Konwencjonalnym rozwiązaniem wydaje się być użycie mod_rewrite do przekierowania odwiedzających na osobną stronę w tym samym dokumencie docroot, ale zamiast tego chciałbym użyć zupełnie innego dokumentu docroot dla strony trzymającej.
apache-2.2
ip
virtualhost
ithinkihaveacat
źródło
źródło
Odpowiedzi:
Nie wiem, czy to możliwe (w każdym razie bez mod_rewrite) na poziomie Apache.
Oto inny pomysł. Co się stanie, jeśli skonfigurujesz dwa wirtualne hosty Apache, a następnie użyjesz iptables, aby transparentnie przekierować gościa do poprawienia wirtualnego hosta? Coś jak
Lub coś podobnego. :)
źródło
To naprawdę nie byłby inny wirtualny host. Ale używając czegoś takiego jak mod_rewrite lub mod_alias możesz wyświetlać zawartość z dowolnego folderu, dla którego ustawiłeś odpowiednie uprawnienia. Jest tylko jeden docroot, ale możesz go skutecznie zmienić w locie.
Jednym ze sposobów na to może być:
Zauważ jednak, że prawdopodobnie byłoby to trochę czystsze, aby poradzić sobie z tym z subdomeną deweloperów.
źródło
Apache 2.3 lub nowszy
Z Apache 2.3 lub nowszym możesz najwyraźniej zrobić coś takiego (przetestowane):
Apache 2.2 lub wcześniejszy
Aktualizacja: To nie jest dobre rozwiązanie. Patrz poniżej.
Musisz zrobić taki hack. Zwróć uwagę na
[PT]
skrót „passsthrough”. Bez tego rzeczywiste przekierowanie HTTP jest wysyłane z powrotem do klienta, co prawdopodobnie nie jest tym, czego chcesz.[OR]
Rzeczą (co oznacza „lub”) pokazuje, jak dopasować wiele adresów.Musisz włączyć to,
mod_rewrite
co możesz zrobić na Debian / Ubuntu za pomocą tego polecenia:Pamiętaj, że ta metoda nie całkowicie blokuje dostęp do Twojej witryny testowej innym osobom, więc prawdopodobnie będziesz chciał dodać pewne zabezpieczenia lub po prostu wybrać bardziej niejasny przedrostek niż
next
.Zaktualizuj metodę mod_rewrite.
Istnieje kilka problemów z tą metodą. Po pierwsze, Django nie działa z dwiema stronami w tym samym procesie jak ten, musisz postępować zgodnie z instrukcjami w tej odpowiedzi .
Po drugie mod_rewrite nie działa z
POST
żądaniami ! WszystkiePOST
s są dyskretnie zmieniane na,GET
a dane wpisu są odrzucane. Bardzo frustrujące! Dlatego polecam użyć ...wersja iptables
Po prostu uruchom serwery na dwóch różnych portach. Ten zawiera WSGI, aby mieć dwie osobne strony django.
Następnie możesz użyć tego
iptables
polecenia, aby skierować żądania z adresu IP na porcie 80 do portu 1222:Zmień,
-A
aby-D
usunąć regułę.Zauważ, że dokumenty sugerują, że musisz dodać dodatkowe polecenia
Listen
iNameVirtualHost
polecenia, ale faktycznie odkryłem, że działa bez nich, a dodanie ich spowodowało, że się zepsuł (przynajmniej w Ubuntu).źródło
Alias cannot occur within <Directory/Location/Files> section
jakieś poprawki? Naprawdę potrzebuję tego: $AFAIK, jedynym sposobem na zrobienie tego jest dowiązanie symboliczne lokalizacji w katalogu głównym dokumentu do treści poza katalogiem głównym dokumentu, a następnie przepisanie żądania do tego.
źródło
Jak powiedział @ Timmmm, ale poprawienie instrukcji ipmatch (zwróć uwagę na „10 .10.10.10”): nazwa_serwera www.example.com
Ponieważ w przeciwnym razie wyświetli się błąd:
źródło