Hôte virtuel Apache basé * la source * IP

Est-il possible de configurer Apache Pour différents hôtes virtuels basés sur

une source

IP? (celles. La même interface, l'un et le même nom d'hôte, mais deux hôtes virtuels différents avec des contenus différents basés sur

une source

IP.)

Motivation Pour ce faire, c'est que mon adresse IP peut accéder au site lui-même, mais que tout le monde reçoit une page de stockage. La solution habituelle semble être l'utilisation de mod_rewrite Pour diriger les visiteurs à une page séparée dans le même répertoire racine, mais je voudrais utiliser un répertoire racine complètement différent pour la page de stockage.
Invité:

Babette

Confirmation de:

En fait, ce ne serait pas un autre hôte virtuel. Mais en utilisant quelque chose comme
http://httpd.apache.org/docs/c ... .html
ou
http://httpd.apache.org/docs/c ... .html
Vous pouvez servir de contenu à partir de n'importe quel dossier pour lequel vous avez installé les autorisations appropriées. Il n'y a qu'un seul docroot, Mais vous pouvez le changer à la volée.

Une façon de le faire:

<virtualhost *.80="">
ServerName example.com
...
DocumentRoot "/path/to/root"
<directory "="" path="" root"="" to="">
...
</directory>
<directory "="" not="" path="" root"="" to="">
Order allow,deny
#replace with your IP
Allow from 192.168.0.100
...
</directory>
RewriteEngine On
#Rewrite to alternate path if IP address matches
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.100$
RewriteRule ^/(.*)$ /path/to/not/root/$1
<virtualhost>

Veuillez noter que ce serait probablement un peu plus propre de faire face à cela avec un sous-domaine dev.
</virtualhost></virtualhost>

Babette

Confirmation de:

Je ne sais pas si c'est possible (au moins sans mod_rewrite) au niveau Apache.

Voici une autre idée. Et si vous configurez deux hôtes virtuels Apache, Puis utiliser iptables Pour la redirection des visiteurs transparents sur le bon hôte virtuel? Sorte de

iptables -A PREROUTING -t nat -i eth0 -p tcp -s your.ip.address -d your.server --dport 80 -j DNAT --to-destination your.actual.site:someport
iptables -A PREROUTING -t nat -i eth0 -p tcp ! -s your.ip.address -d your.server --dport 80 -j DNAT --to-destination your.holding.site:someport

Ou quelque chose de similaire. :)

Babette

Confirmation de:

Apache 2.3 Ou plus récent

DE Apache 2.3 ou plus récent, vous semblez faire quelque chose comme ça (Vérifié):

<virtualhost *:80="">
ServerName www.example.com

<if "-r="" '10.10.10.10'"="">
# The next version of the website...
Alias /favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website-new/main/wsgi.py
</if>
<else>
# The standard version (e.g. holding page).
Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py
</else>

# and so on...

</virtualhost>

Apache 2.2 ou version antérieure

Mise à jour: Ce n'est pas la meilleure solution. Voir ci-dessous.

Vous devez faire un tel pirate informatique. Remarque

[PT]

Que signifie "passage" ". Sans cela, la redirection réelle HTTP Retournez au client, ce qui n'est probablement pas ce dont vous avez besoin. DANS

[OR]

chose (dénotant "ou") Montre comment faire correspondre plusieurs adresses.

Alias /next/favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /next/static/ /home/ubuntu/static/
WSGIScriptAlias /next /home/ubuntu/website-new/main/wsgi.py

Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py

# Rewrite for our IP.
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^80\.4\.170\.209$ [OR]
RewriteCond %{REMOTE_ADDR} ^94\.193\.52\.157$
RewriteRule ^/(.*) /next/$1 [PT]

Vous devez activer

mod_rewrite

Que pouvez-vous faire dans Debian / Ubuntu Avec cette commande:

sudo a2enmod rewrite

Veuillez noter que cette méthode n'interdit pas de personnes complètement différentes d'accès à votre site de test. Vous souhaitez donc probablement ajouter une certaine sécurité ou simplement choisir un préfixe plus flou à.

next

.

Mise à jour de la méthode mod_rewrite.

Cette méthode a quelques problèmes. D'abord, Django ne fonctionne pas avec deux sites dans un processus, comme celui-ci, vous devez suivre les instructions de
https://stackoverflow.com/a/6591232/265521
.

en deuxième

mod_rewrite S. ne fonctionne pas

POST

Enquête

! Tout

POST

s Change silencieusement sur

GET

Et ces messages sont supprimés. Très déplaisant! Je vous recommande donc d'utiliser ...

version iptables

Il suffit d'exécuter les serveurs sur deux ports différents. Ce matériau comprend des matériaux. WSGI, avoir deux sites distincts django.

<virtualhost *:80="">
ServerName www.example.com

Alias /favicon.ico /home/ubuntu/alpha/favicon.ico
Alias /static/ /home/ubuntu/alpha/static/

WSGIDaemonProcess alpha_wsgi user=www-data group=www-data
WSGIScriptAlias / /home/ubuntu/alpha/alpha/wsgi.py
WSGIProcessGroup alpha_wsgi

ServerAdmin info@example.com

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined
</virtualhost>
<virtualhost *:1222="">
ServerName www.example.com

Alias /favicon.ico /home/ubuntu/main/favicon.ico
Alias /static/ /home/ubuntu/main/static/

WSGIDaemonProcess main_wsgi user=www-data group=www-data
WSGIScriptAlias / /home/ubuntu/main/main/wsgi.py
WSGIProcessGroup main_wsgi

ServerAdmin info@example.com

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined
</virtualhost>

Ensuite, vous pouvez l'utiliser

iptables

Commande pour les demandes de routage de votre adresse IP au port 80 Sur le port 1222:

sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222

+ Changement

-A

à

-D

Supprimer la règle.

Veuillez noter que la documentation est invitée à ajouter d'autres

Listen

et

NameVirtualHost

équipes, mais j'ai vraiment découvert qu'il travaille sans eux et leur ajout de la rompre (Au moins dans ubuntu).

Babette

Confirmation de:

AFAIK, la seule façon de le faire - Liez l'emplacement dans la racine du document avec votre contenu en dehors de la racine du document, puis réécrivez la demande.

Christine

Confirmation de:

Comme dit @Timmmm, Mais corriger l'opérateur ipmatch (faire attention à '10 .10.10.10 '): ServerName www.example.com

<if "%{remote_addr}="" '10.10.10.10'"="" -ipmatch="">
# The next version of the website...
Alias /favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website-new/main/wsgi.py
</if>
<else>
# The standard version (e.g. holding page).
Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py
</else>

# and so on...

Parce que sinon, il montrera une erreur:

Cannot parse condition clause: -ipmatch requires subnet/netmask as constant argument

Pour répondre aux questions, connectez-vous ou registre