Mettre en place un proxy (Apache)

Foward-proxy

Il est souvent utilisé pour rendre anonyme une navigation sur Internet car ce n'est pas l'utilisateur qui sera sur le site mais le serveur et renverra la ressource récupéré à son client.

Pour cela, on doit modifier le fichier suivant en ajoutant ces directives :

 nano /etc/apache2/mods-available/proxy.conf
<IfModule mod_proxy.c>

        ProxyRequests On
        
        # Il est possible de bloquer des TLD :
        ProxyBlock *.google.fr
        ProxyBlock *.facebook.com
        
        <Proxy *>
                Require local
                Require ip 192.168.42.0/24
        </Proxy>

        ProxyVia Full
</IfModule>

On active ensuite les modules pour que cette configuration soit pris en compte et que les communications HTTPS puisse également fonctionner :

a2enmod ssl
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_html
a2enmod proxy_balancer
a2enmod proxy_ajp
a2enmod proxy_connect

Puis pour appliquer le tout on relance le service :

 service apache2 restart

Reverse Proxy

Il existe plusieurs contexte d'usage mais pour faire simple, c'est un outil intéressant pour “passer la main” à un autre service.

Proxy vers un serveur d'autres serveur web

Dans le cas de vouloir répartir la charge sur plusieurs serveurs en fonction des ressources demandées lors de la consultation d'une page. On a d'abord besoin de ces modules :

 a2enmod proxy
 a2enmod proxy_http

Et de ces directive dans le contexte suivant :

<VirtualHost *:80>
    ProxyRequests off
    ProxyPass / http://10.0.0.1/
    ProxyPass /images/ http://10.0.0.2/
</VirtualHost>

Il est possible en plus de faire de la répartition de charge sur une ferme de serveurs. Pour cela on a besoin de ce module :

a2enmod proxy_balancer
<VirtualHost *:80>
    ProxyRequests off
    <Proxy balancer://Images>
        BalancerMember http://10.0.0.10:80
        BalancerMember http://10.0.0.11:80
    </Proxy>
    
    ProxyPass /images/ balancer://Images/
</VirtualHost>

Une gestion à distance est disponible mais attention à la sécurité!

<VirtualHost *:80>
    <Location /balancer-manager>
        SetHandler balancer-manager
        Require ip 10.0.0.1
    </Location>
</VirtualHost>

Et on redémarre le service :

 service apache2 restart

Proxy vers un pool PHP

<Proxy "fcgi://127.0.0.1:9000">
   ProxySet timeout=300
</Proxy>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
    SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>