ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, Serveurs, Howto Apache2 - Module proxy

Rediriger les requêtes Web vers différents serveurs Web grâce au module proxy d'Apache.

Author : O.Romain.Jaillet-ramey

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.

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  
Retirer les numéros de lignes

Activer les modules

Script avec 2 lignes

001root@proxy:~# a2enmod proxy_http && a2enmod proxy_connect && a2enmod headers && a2enmod rewrite && a2enmod php5
002  
Retirer les numéros de lignes

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>
002    ProxyRequests Off
003    <Proxy *>
004        AddDefaultCharset off
005        Order deny,allow
006        Deny from all
007    </Proxy>
008    ProxyVia On
009</IfModule>
Retirer les numéros de lignes

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>
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  
Retirer les numéros de lignes

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  
Retirer les numéros de lignes

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
Retirer les numéros de lignes

Puis modifier la ligne

Script avec 1 ligne

001Customlog /var/log/apache2/proxy.domaine1.fr.access.log combined
Retirer les numéros de lignes

par celle-ci :

Script avec 1 ligne

001Customlog /var/log/apache2/proxy.domaine1.fr.access.log vhost_alias_combined
Retirer les numéros de lignes

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}
Retirer les numéros de lignes

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
Retirer les numéros de lignes

De ce fait, j'ai soit l'IPv4, soit l'IPv6 dans mes access.log d'apache