我在 apache/httpd 上有一个 Web 应用程序。通过复制此应用程序并将其放在文档根目录下的不同目录中,我创建了该应用程序的一个新实例。我也为每个实例设置了一个新数据库。
我使用数据库领域来验证用户。
问题是我使用 MySQL 存储用户凭据,并且数据库信息存储在 httpd.conf 中,该信息对于所有实例都是全局的,如下所示(尚无密码):
DBDriver mysql
DBDParams "host=server_host port=3306 dbname=db_name user=user_name"
DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300
我想对不同的实例使用不同的数据库名称,或者对用于身份验证的数据库进行一些映射,这取决于访问的应用程序实例。
是否可以使用 Apache2 中内置的身份验证支持来解决问题?如果不行,可以采用哪些策略来解决问题?
答案1
答案是为每个应用程序实例使用虚拟主机。然后,您可以配置每个虚拟主机要使用的数据库。
例如,将其添加到httpd.conf:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName 192.168.1.107
DocumentRoot /var/www/html/instance
DBDriver mysql
DBDParams "host=localhost port=3306 dbname=db_instance user=user"
DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300
<Directory "/var/www/html/instance">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Restricted Files"
AuthBasicProvider dbd
Require valid-user
AuthDBDUserPWQuery "SELECT password FROM user WHERE user = %s"
</Directory>
</VirtualHost>