Informations :
Dates
- Publish : : Wednesday 28 december 2011
- Modification : Thursday 28 june 2012
- 2568 views
Share :
La situation suivante : 1 seule adresse InterNet avec le souhait de pouvoir accéder sur le port web par default (80
) à plusieurs serveurs Web du réseau local toujours sur le port 80
.
En clair : Plusieurs serveurs Web sur une seule IP interNet.
- 1 IP InterNet :
1.2.3.4
(le routeur ou la passerelle Linux) - 1 serveur Web sur la machine :
192.168.10.1
pour un domaine. - 1 serveur Web sur la machine :
192.168.10.2
pour un autre domaine.
Installer Apache2 et les modules
Script avec 2 lignes
001root@proxy:~# aptitude install apache2 apache2-utils libapache2-mod-geoip libapache2-mod-auth-pam libapache2-mod-auth-openid
002
Activer les modules
Script avec 2 lignes
001root@proxy:~# a2enmod proxy_http && a2enmod proxy_connect && a2enmod headers && a2enmod rewrite && a2enmod php5
002
Vérifier la configuration du modules proxy
On édite vim /etc/apache2/mods-enabled/proxy.conf
Script avec 9 lignes
001<IfModule mod_proxy.c>
002ProxyRequests Off
003<Proxy *>
004AddDefaultCharset off
005Order deny,allow
006Deny from all
007</Proxy>
008ProxyVia On
009</IfModule>
Configuration des virtual-hosts
On édite ou crée vim /etc/apache2/sites-available/proxy.domaine1.fr.conf
qui pointera sur la machine 192.168.10.1
Script avec 26 lignes
001<VirtualHost 10.92.120.10:80>
002ServerAdmin roots at zw3b dot fr
003 004ServerName proxy.domaine1.fr
005ServerAlias domaine1.fr *.domaine1.fr
006 007ErrorLog /var/log/apache2/proxy.domaine1.fr.error.log
008Customlog /var/log/apache2/proxy.domaine1.fr.access.log combined
009LogLevel warn
010011
Order deny,allow
012Allow from all
013 014ProxyPass / http://192.168.10.1/
015ProxyPassReverse / http://192.168.10.1/
016ProxyPreserveHost On
017ProxyRequests Off
018ProxyVia On
019SetEnv force-proxy-request-1.0 1
020SetEnv proxy-nokeepalive 1
021 022# RequestHeader unset Accept-Encoding
023# Header unset "WWW-Authenticate: NTLM"
024# Header add WWW-Authenticate "Basic realm=proxy.domaine1.fr"
025</VirtualHost>
026
On édite ou crée vim /etc/apache2/sites-available/proxy.domaine2.fr.conf
qui pointera sur la machine 192.168.10.2
Script avec 27 lignes
001<VirtualHost 10.92.120.10:80>
002ServerAdmin roots at zw3b dot fr
003 004ServerName proxy.domaine2.fr
005ServerAlias domaine2.fr *.domaine2.fr
006 007ErrorLog /var/log/apache2/proxy.domaine2.fr.error.log
008Customlog /var/log/apache2/proxy.domaine2.fr.access.log combined
009LogLevel warn
010011
Order deny,allow
012Allow from all
013 014ProxyPass / http://192.168.10.2/
015ProxyPassReverse / http://192.168.10.2/
016ProxyPreserveHost On
017ProxyRequests Off
018ProxyVia On
019SetEnv force-proxy-request-1.0 1
020SetEnv proxy-nokeepalive 1
021 022# RequestHeader unset Accept-Encoding
023# Header unset "WWW-Authenticate: NTLM"
024# Header add WWW-Authenticate "Basic realm=proxy.domaine2.fr"
025 026</VirtualHost>
027
Pour loguer le nom des Hosts (le ServerAlias
et non ServerName
)
Ajouter celà "%{Host}i:%p"
au LogFormat
pour inscrire dans le fichier access.log
le nom des Hosts (le ServerAlias
) que l'internaute passe dans son URL.
Script avec 1 ligne
001LogFormat "%h "%{Host}i:%p" %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_alias_combined
Puis modifier la ligne
Script avec 1 ligne
001Customlog /var/log/apache2/proxy.domaine1.fr.access.log combined
par celle-ci :
Script avec 1 ligne
001Customlog /var/log/apache2/proxy.domaine1.fr.access.log vhost_alias_combined
On active les virtual-hosts et on reload notre serveur Apache
Script avec 2 lignes
001root@proxy:~# a2ensite proxy.domaine1.fr.conf && a2ensite proxy.domaine2.fr.conf
002/etc/init.d/apache2 {start|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean}
Voilà, les requetes Web pour *.domaine1.fr seront envoyées vers la machine 192.168.10.1
et celles pour *.domaine2.fr seront envoyées vers la machine 192.168.10.2
Tiens sinon j'ajoute cela rapidement : Ayant activé le mod_proxy d'apache j'avais l'adresse IP de la machine elle-même (REMOTE_ADDR)
, il a fallu simplement changer sur la ligne LogFormat
, et remplacer la variable %h
par {X-Forwarded-For}i
du fichier /etc/apache2/apache.conf
des serveurs Apache derrière l'apache en mod_proxy
Script avec 1 ligne
001#LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combinedLogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
De ce fait, j'ai soit l'IPv4, soit l'IPv6 dans mes access.log d'apache