我正尝试使用域身份validation插件根据其IP地址为站点访问者分配成员身份的angular色。
我可以configuration插件确定,但是对我来说,所有的请求都将来自本地主机,而不是“真正的”IP地址。
在这种情况下,我使用NGINX,所以我尝试通过proxy_set_header(例如http://wiki.nginx.org/HttpProxyModule )将X-Real-IP设置为$ remote_addr,但据我所知,只是使IP地址可用在标题中。
我如何使从NGINX发送到Plone的请求看起来是源自远程IP地址?
我正在使用NGINX,但我也接受适用于Apache的答案。
域身份验证插件使用request.getClientAddr()
方法来确定客户端的IP地址,该客户端又使用REMOTE_ADDR
变量和X-FORWARDED-FOR
标头。
通常情况下,您不能依赖X-FORWARDED-FOR
标题,只是看到任何人都可以设置它。 但是你可以配置Zope从一组给定的信任代理信任这个头。 使用受信任的代理列表, REMOTE_ADDR
IP地址将被替换为X-FORWARDED-FOR
报头中给出的下一个地址,直到用尽地址信任为止。 找到的最后一个IP地址就是新的客户端地址。 这使您可以链接一组代理,并仍然能够信任您获取正确的客户端地址,以将您的角色作为基础。
要将Zope配置为信任代理的X-FORWARDED-FOR
报头,请在zope.conf
文件中设置trusted-proxy
配置参数。 如果您的nginx服务器在同一台主机上运行,只需将其设置为localhost:
trusted-proxy 127.0.0.1
您可以通过添加多个条目来指定多个名称:
trusted-proxy 127.0.0.1 trusted-proxy loadbalancer.localnet
trusted-proxy
采取IP地址和主机名。
许多反向代理将X-Forwarded-For标头设置为原始IP。 如果还没有,域auth插件应该被更新来处理这个问题。