nginx为php $ _SERVER ['REMOTE_ADDR']准备set_proxy_header

时间:2011-11-24 14:52:32

标签: php nginx

在nginx中,如何设置proxy_pass以便它发送到正确的客户端远程IP地址?目前,只显示服务器的IP。我知道正确的方法是

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

然而,另一方面,我有一个不是我写的支持系统。我不想更改所有代码以适合X-Forwarded-For参数。

如何告诉nginx以格式发送$remote_addr,以便$_SERVER['REMOTE_ADDR']可以阅读?

3 个答案:

答案 0 :(得分:1)

如果您代理到apache 2.4服务器,则可以使用模块mod_remoteip。由于这些指令,它会将标题X-Forwarded-For“转换”为Remote-Addr标题,这里有一个例子:

#### 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

答案 1 :(得分:0)

proxy_set_header REMOTE_ADDR $remote_addr;无法在nginx proxy_pass(link

中使用

因此,您必须为您的应用程序准备一些中间件。 例如,伪代码:

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

答案 2 :(得分:0)

在apache 2.2中,您也可以使用libapache2-mod-rpaf。