我正在尝试使用从apache 2.4到nginx的cookie在代理之间传播http标头。
Apache只针对Active Directory进行kerberos身份验证。由于AD身份验证为每个get请求添加了开销,我想限制身份验证。我们的想法是设置一个在x时间后过期的cookie,如果cookie不存在,则只通过apache执行auth。 此外,我希望apache中的remote_user可用于nginx。
Nginx侦听端口80,并对端口81(同一主机)上的apache执行auth子请求
我可以在apache中设置http标头,但是这些会在nginx域中丢失。
我首先尝试从nginx读取我感兴趣的特定http标头,但是一旦将请求转移到nginx,我就看不到它,虽然我可以看到它们在apache端设置。
我的第二个想法是将我感兴趣的标题推送到服务器cookie,然后在nginx端提取它,但cookie值始终为空。
在apache conf中我有:
RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER}]
Header add X-Auth-User %{PROXY_USER}e
我可以看到apache端的标题很好,但是在nginx端没有任何内容。
尝试将数据泵入apache中的cookie:
RewriteCond %{LA-U:REMOTE_USER} (.*)
RewriteRule ^/ - [env=COOKIE1:%1]
RewriteRule .* - [CO=acaprox:tst=%{COOKIE1}e:.my-domain.com:300:/] [R=307,L]
这种方法的问题在于test的值总是为空。
我也尝试重用我可以成功插入标题的环境变量到cookie中,但它也总是空的:
RewriteRule .* - [CO=cookietest:tst=%{ENV:PROXY_USER}:.my-domain.com:300:/] [R=307,L]
可能很明显,我在这个领域没有多少经验。
答案 0 :(得分:0)
该问题似乎与remote_user有关,其他变量与我使用的方法一致。
我的解决方案是在上游代理(即x-remote-user)上设置一个额外的头,然后在auth_request成功的情况下从中提取值。
auth_request $user $upstream_http_x_remote_user
然后可以将$ user变量推送到cookie