Apache-2.2
如何為應用程序的不同“實例”使用不同的數據庫領域進行身份驗證?
我在 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
我想為不同的實例使用不同的 dbname,或者根據訪問的應用程序的實例,對用於身份驗證的數據庫進行一些映射。
是否可以使用 Apache2 中的內置身份驗證支持來解決?如果不是,可以應用哪些策略來解決問題?
答案是為每個應用程序實例使用虛擬主機。然後,您可以為每個虛擬主機配置要使用的數據庫。
例如,將其添加到 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>