Name : BETA-TESTERS
Project name : ZW3B-API-BETA-TESTERS
Authorized. - 200 - Client API Name and Origin Wildcard OK
Rediriger les requêtes Web vers différents serveurs Web grâce au module proxy d'Apache.
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.2.3.4
(le routeur ou la passerelle Linux)192.168.10.1
pour un domaine.192.168.10.2
pour un autre domaine.Script avec 2 lignes
001root@proxy:~# aptitude install apache2 apache2-utils libapache2-mod-geoip libapache2-mod-auth-pam libapache2-mod-auth-openid 002
Script avec 2 lignes
001root@proxy:~# a2enmod proxy_http && a2enmod proxy_connect && a2enmod headers && a2enmod rewrite && a2enmod php5 002
On édite vim /etc/apache2/mods-enabled/proxy.conf
Script avec 9 lignes
001<IfModule mod_proxy.c> 002 ProxyRequests Off 003 <Proxy *> 004 AddDefaultCharset off 005 Order deny,allow 006 Deny from all 007 </Proxy> 008 ProxyVia On 009</IfModule>
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> 002 ServerAdmin roots at zw3b dot fr 003 004 ServerName proxy.domaine1.fr 005 ServerAlias domaine1.fr *.domaine1.fr 006 007 ErrorLog /var/log/apache2/proxy.domaine1.fr.error.log 008 Customlog /var/log/apache2/proxy.domaine1.fr.access.log combined 009 LogLevel warn 010 011 Order deny,allow 012 Allow from all 013 014 ProxyPass / http://192.168.10.1/ 015 ProxyPassReverse / http://192.168.10.1/ 016 ProxyPreserveHost On 017 ProxyRequests Off 018 ProxyVia On 019 SetEnv force-proxy-request-1.0 1 020 SetEnv 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> 002 ServerAdmin roots at zw3b dot fr 003 004 ServerName proxy.domaine2.fr 005 ServerAlias domaine2.fr *.domaine2.fr 006 007 ErrorLog /var/log/apache2/proxy.domaine2.fr.error.log 008 Customlog /var/log/apache2/proxy.domaine2.fr.access.log combined 009 LogLevel warn 010 011 Order deny,allow 012 Allow from all 013 014 ProxyPass / http://192.168.10.2/ 015 ProxyPassReverse / http://192.168.10.2/ 016 ProxyPreserveHost On 017 ProxyRequests Off 018 ProxyVia On 019 SetEnv force-proxy-request-1.0 1 020 SetEnv 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
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
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