2011-11-24 38 views
2

Dans nginx, comment pouvez-vous configurer votre proxy_pass afin qu'il envoie à corriger l'adresse IP distante du client? Actuellement, seule l'adresse IP du serveur apparaît. Je sais que la bonne façon de le faire est

proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $remote_addr; 

Cependant, à l'autre bout, j'ai un système de soutien qui n'est pas écrit par moi. Je ne veux pas changer tout le code pour correspondre au paramètre X-Forwarded-For.

Comment puis-je demander à nginx d'envoyer le $remote_addr au format afin qu'il puisse être lu avec $_SERVER['REMOTE_ADDR']?

+0

Quel logiciel serveur fonctionne en tant que backend? Si c'est apache, installez mod_rpaf. –

+0

Sur le serveur proxy, c'est nginx, l'autre serveur sur lequel le système de support est installé est uniquement un espace web hébergé. –

Répondre

0

proxy_set_header REMOTE_ADDR $remote_addr; ne fonctionnent pas dans nginx proxy_pass (link)

Vous devez donc préparer des middleware à votre application. Par exemple, pseudo-code:

class RemoteAddrMiddleware(request) 
    def process_request(request): 
     if request['REMOTE_ADDR'].blank? 
      request['REMOTE_ADDR'] = request['X-Forwarded-For'] 
     end 
    end 
end 
1

Si vous proxy à un serveur apache 2.4, vous pouvez utiliser le module mod_remoteip. Il "traduire" l'en-tête d'Forwarded-X-tête à distance Adr grâce à ces directives, voici un exemple:

#### Set that the Remote IP comes from the header X-Forwared-for 
RemoteIPHeader X-Forwarded-For 
#### Trust the proxy at localhost 
RemoteIPTrustedProxy 127.0.0.1 
#### Trust the proxy with the address range from 192.168.15.0 to 192.168.15.255 
RemoteIPTrustedProxy 192.168.15.0/24 
0

En apache 2.2, vous pouvez également utiliser libapache2-mod-rpaf.

Questions connexes