我正在尝试在 Apache 中设置反向代理。用户需要登录,然后会收到一个 cookie。我希望 Apache 检查该 cookie。有办法吗?
例如,现在我的配置如下所示:
<VirtualHost *:82>
# username:password sent on to endpoint
RequestHeader set Authorization "Basic cm9vdjfjDJaGRvYa=="
ProxyPass /monitors/2/ http://192.168.1.6/foo.cgi
ProxyPassReverse /monitors/2/ http://192.168.1.6/foo.cgi
</VirtualHost>
我可以在 VirtualHost 中添加一些内容来根据 cookie 限制访问吗?
答案1
当然。我也这么做。
当用户登录时,我会给他们一个 cookie 并在其中创建一个令牌/t/
令牌编号,并将其放入 cookie 中:S=
令牌编号;PATH=/
然后,我可以用它RewriteCond
来检查文件是否存在:
RewriteEngine on
# check for no cookie being set
RewriteCond %{HTTP:Cookie} !S=([a-zA-Z0-9]+)
RewriteRule ^/*protected/ /login.html [L,R]
# check for an invalid cookie being set
RewriteCond %{HTTP:Cookie} S=([a-zA-Z0-9]+)
RewriteCond /t/%1 !-f
RewriteRule ^/*protected/ /login.html [L,R]
最后,垃圾收集器定期运行并删除旧令牌:
find /t -type f \! -atime +1 -delete
为了使 atime 自动更新,我已经/t
在不使用的情况下进行了挂载noatime
,并且我让它可以通过网络访问(但未被索引),并且部分样式表引用/loggedin.txt
被重写为:
RewriteCond %{HTTP:Cookie} S=([a-zA-Z0-9]+)
RewriteRule ^/*loggedin\.txt$ /t/%1 [L]