Apache 2.4 et nginx avec les modules rpaf et remoteip

Photo de profil pour l’utilisateur Françoise Lindon
Soumis par Françoise Lindon le
Image-billet-blog
Apache 2.4 et nginx avec les modules rpaf et remoteip

Sur un serveur dédié tournant sous Ubuntu Server 14.04 LTS nous avons installé NGNIX en reverse-proxy devant un Apache. Rencontrant un problème avec un module de Drupal, nous avons poussé notre investigation à tester tout bonnement la configuration du serveur.

Ce fichier PHP est sensé nous retourner l’adresse IP du visiteur :

Et bien ça nous affichait l’IP du serveur dédié. Dans ces conditions là, nous comprenions mieux l’existence du bug dans Drupal qui n’y était pour rien comme nous le supputions.
J'ai donc rajouté trois petites lignes dans le fichier suivant :

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Ce qui donne :
cat /usr/local/vesta/data/templates/web/nginx/default.tpl

server {
    listen      %ip%:%proxy_port%;
    server_name %domain_idn% %alias_idn%;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;

    location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass      http://%ip%:%web_port%;

        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %docroot%;
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location @fallback {
        proxy_pass      http://%ip%:%web_port%;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include %home%/%user%/conf/web/nginx.%domain%.conf*;
}

cat /usr/local/vesta/data/templates/web/nginx/default.stpl

server {
    listen      %ip%:%proxy_ssl_port%;
    server_name %domain_idn% %alias_idn%;
    ssl         on;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;

    location / {

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass      https://%ip%:%web_ssl_port%;

        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %sdocroot%;
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location @fallback {
        proxy_pass      https://%ip%:%web_ssl_port%;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include %home%/%user%/conf/web/snginx.%domain%.conf*;

J’ai activé le template « default » dans mon admin Vesta, et j’ai reconstruit les droits en sélectionnant « Récréer web » pour tous mes utilisateurs de sorte que le template s’applique à tous les sites en fonction.
cat /etc/apache2/mods-enabled/rpaf.conf


    RPAFenable On

    # When enabled, take the incoming X-Host header and
    # update the virtualhost settings accordingly:
    RPAFsethostname On

    # Define which IP's are your frontend proxies that sends
    # the correct X-Forwarded-For headers:
RPAFproxy_ips 127.0.0.1 ::1 ADRESSEIPDUSERVEUR

    # Change the header name to parse from the default
    # X-Forwarded-For to something of your choice:
#   RPAFheader X-Real-IP

Redémarrons Apache et Nginx :
service apache2 restart
service nginx restart

L’adresse IP ne change pas avec notre script du début, c'est toujours celle du serveur.
Finalement, je suis tombée sur ce billet tout récent sur Apache 2.4 avec les modules rpaf et remoteip
Tout ce que j’ai eu à faire, c’est appliquer la solution 2, c’est à dire installer et activer le module remoteip et modifier le fichier /etc/apache2/mods-available/remoteip.conf comme suit :


#  RemoteIPHeader X-Forwarded-For
  RemoteIPHeader X-Real-IP
  RemoteIPInternalProxy ADRESSEIPDUSERVEUR

Il suffit de relancer Apache et constater que les logs d’accès au serveur affichent l’IP du visiteur, tout comme notre script php du début du billet affiche également cette même IP. Problème résolu !

Catégorie

Ajouter un commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les lignes et les paragraphes vont à la ligne automatiquement.