将http标头推入Cookie

时间:2016-10-17 20:47:56

标签: apache mod-rewrite nginx apache2

我正在尝试使用从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]

可能很明显,我在这个领域没有多少经验。

1 个答案:

答案 0 :(得分:0)

该问题似乎与remote_user有关,其他变量与我使用的方法一致。

我的解决方案是在上游代理(即x-remote-user)上设置一个额外的头,然后在auth_request成功的情况下从中提取值。

auth_request $user $upstream_http_x_remote_user

然后可以将$ user变量推送到cookie