Est-il possible de configurer Apache pour différents hôtes virtuels en fonction de l' IP source ? (c.-à-d. même interface, même nom d'hôte, mais deux hôtes virtuels différents, avec un contenu différent, basé sur l' IP source .)
La motivation est que mon adresse IP puisse accéder au site proprement dit, mais que tout le monde reçoive la page d'accueil. La solution conventionnelle semble être d'utiliser mod_rewrite pour diriger les visiteurs vers une page distincte dans le même docroot, mais j'aimerais utiliser un docroot complètement différent pour la page d'attente à la place.
apache-2.2
ip
virtualhost
ithinkihaveacat
la source
la source
Réponses:
Je ne sais pas si c'est possible (sans mod_rewrite, de toute façon) au niveau Apache.
Voici une autre idée. Que faire si vous configurez deux hôtes virtuels Apache, puis utilisez iptables pour transférer de manière transparente le visiteur vers l'hôte virtuel correct? Quelque chose comme
Ou quelque chose de similaire. :)
la source
Ce ne serait pas vraiment un hôte virtuel différent. Mais en utilisant quelque chose comme mod_rewrite ou mod_alias, vous pouvez diffuser du contenu à partir de n'importe quel dossier pour lequel vous avez défini les autorisations appropriées. Il n'y a qu'un seul docroot, mais vous pouvez le changer efficacement à la volée.
Une façon de le faire pourrait être:
Notez cependant qu'il serait probablement un peu plus propre de gérer cela avec un sous-domaine de développement.
la source
Apache 2.3 ou version ultérieure
Avec Apache 2.3 ou version ultérieure, vous pouvez apparemment faire quelque chose comme ça (testé):
Apache 2.2 ou version antérieure
Mise à jour: ce n'est pas une bonne solution. Voir ci-dessous.
Vous devez faire un hack comme ça. Notez le
[PT]
qui signifie "passthrough". Sans cela, une redirection HTTP réelle est renvoyée au client, ce qui n'est probablement pas ce que vous voulez. La[OR]
chose (qui signifie "ou") montre comment faire correspondre plusieurs adresses.Vous devez activer
mod_rewrite
ce que vous pouvez faire sur Debian / Ubuntu avec cette commande:Notez que cette méthode n'interdit pas complètement à d'autres personnes d'accéder à votre site de test, vous voudrez donc probablement ajouter un peu de sécurité, ou simplement choisir un préfixe plus obscur que
next
.Mise à jour sur la méthode mod_rewrite.
Il y a quelques problèmes avec cette méthode. Tout d'abord, Django ne fonctionne pas avec deux sites dans le même processus comme celui-ci, vous devez suivre les instructions de cette réponse .
Deuxièmement, mod_rewrite ne fonctionne pas avec les
POST
requêtes ! Tous lesPOST
s sont modifiés en silenceGET
et les données de publication sont supprimées. Très frustrant! Par conséquent, je vous recommande d'utiliser le ...version iptables
Exécutez simplement les serveurs sur deux ports différents. Celui-ci comprend les éléments WSGI pour avoir deux sites django distincts.
Ensuite, vous pouvez utiliser cette
iptables
commande pour router les demandes de votre adresse IP sur le port 80 vers le port 1222:Passez
-A
à-D
pour supprimer la règle.Notez que les documents suggèrent que vous devez ajouter des commandes supplémentaires
Listen
etNameVirtualHost
, mais j'ai trouvé que cela fonctionne sans eux, et les ajouter l'a fait casser (au moins dans ubuntu).la source
Alias cannot occur within <Directory/Location/Files> section
une solution? J'ai vraiment besoin de ça: $AFAIK, la seule façon de le faire est de créer un lien symbolique entre un emplacement dans la racine du document et votre contenu en dehors de la racine du document, puis de réécrire la demande.
la source
Comme @Timmmm l'a dit, mais en corrigeant l'instruction ipmatch (notez le '10 .10.10.10 '): ServerName www.example.com
Sinon, il affichera l'erreur:
la source