Comment définir REMOTE_ADDR dans apache avant de php est appelé
J'ai un site web mis en place avec nginx agissant comme un reverse proxy apache 2.2, qui est en cours d'exécution de php. À partir de apache et php du point de vue de l'adresse IP de toutes les demandes est le serveur nginx. J'aimerais php pour voir la même IP distante que nginx voit.
Nginx jeux un en-tête X-Real-IP qui contient l'adresse IP à distance que nginx voit. J'ai essayé de faire quelque chose comme cela dans la conf apache:
SetEnvIf ^X-Real-IP$ "(.+)" REMOTE_ADDR=$1
Mon espoir était que je pourrais définir le REMOTE_ADDR variable d'environnement et lorsque php obtient finalement invoqué, il serait de voir les IP distante que nginx voit. Je pense que le code php est en train de faire ceci:
$_SERVER['REMOTE_ADDR']
De toute façon, ce n'est pas de travail. Des idées? Pouvez-vous ne pas définir REMOTE_ADDR dans le fichier de configuration d'apache? Merci.
OriginalL'auteur Russell Neufeld | 2010-02-24
Vous devez vous connecter pour publier un commentaire.
Pas sûr de savoir si
REMOTE_ADDR
peut être modifié de cette façon...En fait, vous pourriez avoir besoin d'installer /activer un autre module Apache, comme
mod_rpaf
(en les citant) :Voici un blog-post à ce sujet : Nginx proxy d'Apache - accès distant adresse IP de l'hôte à l'aide de mod_praf
Mise à jour: lien d'origine ne fonctionne pas pour l'instant, mais il est également disponible sous forme de paquet debian:
apt-get install libapache2-mod-rpaf
Au passage : j'ai n'avais jamais entendu parler de ce module ; vous ne savez pas si il est bien pris en charge / stable / maintenir / ... ;; nah, le nom sonne drôle ^^ pas forcément une mauvaise chose
Je suis sûr un tas de "Clever & Intelligents" les comics, j'ai pu trouver le mot utilisé dans une violente scène quelque part. Pour illustrer: pekkagaiser.com/stuff/cleversmart.jpg (C'est en allemand, mais il n'a pas d'importance.)
utilisé mod_rpaf et cela a fonctionné comme un charme. Merci beaucoup!
En français, nous avons parfois (bon, il y a quelques années, en fait) dire "Et paaaffff le chien" et "paf le chien" ^^ ;;; @Russell : bon à savoir ! J'ai moi-même un serveur apache derrière un nginx utilisé comme proxy inverse, et j'ai connu le même problème (mais "résolu" il en bidouillant mon script PHP)
OriginalL'auteur Pascal MARTIN
J'ai résolu ce problème en utilisant mod_remoteip pour Apache. mod_remoteip est pour Apache 2.5, mais grâce à ce mec vous pouvez l'utiliser sur Apache 2.2.x.
Télécharger mod_remoteip.c à partir de https://gist.github.com/1042237 et le compiler avec
Cela devrait créer mod_remoteip.pour copier dans le répertoire des modules. apxs sera également ajouter de la directive LoadModule dans votre httpd.conf pour le module nouvellement créé.
Ouvrir httpd.conf et vérifier n'directive LoadModule pour mod_remoteip existe
Ajouter directive RemoteIPHeader dans httpd.conf
Cette directive s'instruire mod_remoteip utiliser X-Forwarded-For valeur de nginx comme remote_addr. Vous pouvez également utiliser X-Real-IP à la place:
Redémarrer Apache. Si vous avez configuré le proxy dans les en-têtes de nginx il fonctionnera comme un charme et remote_addr dans Apache sera correct
mod_remoteip a un défaut et il ne fonctionne pas avec mod_rewrite, c'est à dire sur rewritted Url que vous obtiendrez toujours le 127.0.0.1. Ainsi, à la fin, la seule solution que j'ai trouvé est mod_rpaf. Le compiler et l'installer sur la même manière que j'ai décrite pour mod_remoteip
OriginalL'auteur mileusna
Vous pouvez essayer cette simple module PHP
https://github.com/yohgaki/realip
Simplement réécrit $_SERVER['REMOTE_ADDR'] avec X-Forwarded-For ou X-Real-IP quel que soit l'en-tête que vous aimez. Vous pouvez accomplir cela avec beaucoup de méthode, mais je tiens à le faire car le module PHP. Donc je l'ai écrit.
OriginalL'auteur Yasuo Ohgaki
Je ne sais pas si REMOTE_ADDR peut être manipulé - il se pourrait qu'il ne peut pas - mais vous devriez être capable de trouver le X-Real-d'en-tête IP en PHP grâce à quelque chose comme
$_SERVER["HTTP_X_Real_IP"]
ou similaire - vérifier
phpinfo()
pour la bonne notation.Aussi, Apache variables d'environnement définies dans
.htaccess
devrait être visible dans PHP.OriginalL'auteur Pekka 웃
Apache (nécessite mod_headers module):
REF pour SetEnvIf RegEx: https://stackoverflow.com/a/10346093
Fonctionne aussi, mais ne pas vérifier l'entrée de la propriété intellectuelle:
En PHP:
-ou-
Non-core Apache modules requis
OriginalL'auteur Trevorw
mod_rpaf
(sudo apt-get install libapache2-mod-rpaf)
résolu tous les problèmes et REMOTE_ADDRR semble maintenant Ok!..
OriginalL'auteur wacto
Improvisé.. mais pourriez-vous passer à l'en-tête X-Real-IP comme une variable php à l'aide de certains de réécriture de la magie..? Ne peut pas htaccess faire des trucs avec des informations d'en-tête avant qu'il invoque PHP?
OriginalL'auteur dmp
Vous voudrez probablement utiliser ce fait: http://httpd.apache.org/docs/2.3/mod/mod_remoteip.html. A un peu plus de fonctionnalités et est maintenu par apache eux-mêmes.
Edit: je faisais allusion à la mod_rpaf suggestion ci-dessus.
OriginalL'auteur n_are_q