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 !
Merci
Merci sur ce retour de configuration de serveur dédié, je n'ai pas eu ce problème avec Drupal mais on ne sait jamais!
Ajouter un commentaire