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