Ist es möglich, Apache für verschiedene virtuelle Hosts basierend auf der Quell- IP zu konfigurieren ? (dh gleiche Schnittstelle, gleicher Hostname, aber zwei verschiedene virtuelle Hosts mit unterschiedlichem Inhalt, basierend auf der Quell- IP.)
Die Motivation dafür ist, dass meine IP-Adresse auf die richtige Site zugreifen kann, aber alle anderen die Holding-Seite erhalten. Die herkömmliche Lösung scheint darin zu bestehen, mod_rewrite zu verwenden, um Besucher auf eine separate Seite innerhalb derselben Docroot zu leiten, aber ich möchte stattdessen eine völlig andere Docroot für die Holding-Seite verwenden.
apache-2.2
ip
virtualhost
ithinkihaveacat
quelle
quelle
Antworten:
Ich weiß nicht, ob das in Apache-Level möglich ist (jedenfalls ohne mod_rewrite).
Hier ist eine andere Idee. Was ist, wenn Sie zwei virtuelle Apache-Hosts einrichten und dann iptables verwenden, um Besucher transparent an den korrekten virtuellen Host weiterzuleiten? Etwas wie
Oder etwas ähnliches. :) :)
quelle
Es wäre nicht wirklich ein anderer virtueller Host. Mit mod_rewrite oder mod_alias können Sie jedoch Inhalte aus jedem Ordner bereitstellen , für den Sie die entsprechenden Berechtigungen festgelegt haben. Es gibt nur eine Docroot, aber Sie können diese effektiv im laufenden Betrieb ändern.
Ein Weg, dies zu tun, könnte sein:
Beachten Sie jedoch, dass es wahrscheinlich etwas sauberer wäre, dies mit einer Dev-Subdomain zu handhaben.
quelle
Apache 2.3 oder höher
Mit Apache 2.3 oder höher können Sie anscheinend so etwas tun (getestet):
Apache 2.2 oder früher
Update: Dies ist keine gute Lösung. Siehe unten.
Du musst so einen Hack machen. Beachten Sie das,
[PT]
was für "Passthrough" steht. Ohne sie wird eine tatsächliche HTTP-Umleitung an den Client zurückgesendet, was wahrscheinlich nicht das ist, was Sie wollen. Das[OR]
Ding (was für "oder" steht) zeigt, wie mehrere Adressen abgeglichen werden.Sie müssen aktivieren,
mod_rewrite
was Sie unter Debian / Ubuntu mit diesem Befehl tun können:Beachten Sie, dass diese Methode anderen Personen den Zugriff auf Ihre Testsite nicht vollständig verbietet. Daher sollten Sie wahrscheinlich etwas Sicherheit hinzufügen oder einfach ein dunkleres Präfix als wählen
next
.Update der mod_rewrite-Methode.
Bei dieser Methode gibt es einige Probleme. Erstens funktioniert Django nicht mit zwei Sites im selben Prozess wie diesem. Sie müssen den Anweisungen in dieser Antwort folgen .
Zweitens funktioniert mod_rewrite nicht mit
POST
Anfragen ! AllePOST
s werden stillschweigend in geändertGET
und die Postdaten werden verworfen. Sehr frustrierend! Deshalb empfehle ich Ihnen die ...iptables Version
Führen Sie die Server einfach an zwei verschiedenen Ports aus. Dieser enthält das WSGI-Zeug, um zwei separate Django-Sites zu haben.
Mit diesem
iptables
Befehl können Sie dann Anforderungen von Ihrer IP-Adresse an Port 80 an Port 1222 weiterleiten:Wechseln Sie
-A
zu-D
, um die Regel zu entfernen.Beachten Sie, dass die Dokumente vorschlagen, dass Sie zusätzliche
Listen
undNameVirtualHost
Befehle hinzufügen müssen , aber ich habe tatsächlich festgestellt, dass es ohne sie funktioniert, und das Hinzufügen von Befehlen hat es kaputt gemacht (zumindest in Ubuntu).quelle
Alias cannot occur within <Directory/Location/Files> section
eine Lösung? Ich brauche das wirklich: $AFAIK, die einzige Möglichkeit, dies zu tun, besteht darin, einen Speicherort innerhalb des Dokumentstamms mit Ihrem Inhalt außerhalb des Dokumentstamms zu verknüpfen und die Anforderung dann neu zu schreiben.
quelle
Wie @Timmmm sagte, aber die ipmatch-Anweisung korrigiert (beachten Sie die '10 .10.10.10 '): Servername www.example.com
Denn sonst wird der Fehler angezeigt:
quelle