Apache-2.2

如何為應用程序的不同“實例”使用不同的數據庫領域進行身份驗證?

  • March 22, 2012

我在 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>

引用自:https://serverfault.com/questions/371946