![如何根据应用程序身份验证逻辑限制代理应用程序](https://linux22.com/image/647985/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E9%80%BB%E8%BE%91%E9%99%90%E5%88%B6%E4%BB%A3%E7%90%86%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我有一个带有 mod 代理的 vhost,可以很好地重定向,但我想添加到它。
这是我的虚拟主机:
<VirtualHost *:80>
ServerName www.domaine.local
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /subsonic/ http://serv2.domaine.local/subsonic/
ProxyPassReverse /subsonic/ http://serv2.domaine.local/subsonic/
ProxyPass /owncloud/ http://serv3.domaine.local/owncloud/
ProxyPassReverse /owncloud/ http://serv3.domaine.local/owncloud/
ProxyPass / http://serv1.domaine.local/
ProxyPassReverse / http://serv1.domaine.local/
</VirtualHost>
在 serv1 中,我有自己的 php/mysql/ldap 应用程序,用于验证我的用户。我的规则之一是:1 个用户可以访问 0、1 或 N 个应用程序。
因此我想要的是例如:
未经身份验证的用户只能拥有反向代理虚拟主机的这一部分:
ProxyPass / http://serv1.domaine.local/ ProxyPassReverse / http://serv1.domaine.local/
只允许访问一个应用程序(“subsonic”)的用户可以访问:
ProxyPass / http://serv1.domaine.local/ ProxyPassReverse / http://serv1.domaine.local/
和
ProxyPass /subsonic/ http://serv2.domaine.local/subsonic/ ProxyPassReverse /subsonic/ http://serv2.domaine.local/subsonic/
“全部访问”用户可以访问所有定义的代理
我不知道该怎么做,也许我可以$_SESSION['authtothisapp'] = true ;
在我的 php 应用程序中放置一个变量,但是如何告诉 apacheif $_SESSION['authtothisapp'] = true
然后允许访问给定的代理应用程序?
答案1
在全局代理级别上,我已经使用会话 cookie 完成了此操作,如下所示:
<Proxy *>
Order deny,allow
Deny from all
SetEnvIf Cookie "authtoken=myCookie" let_me_in
Allow from env=let_me_in
</Proxy>
您可能能够使用代理配置中的显式 URL 根据 cookie 限制对各个目录的访问,如下所示:
<Proxy http://example.com/foo/*>
但我个人尚未测试过该选项。