各FQDNに対し
- /etc/apache2/sites-enabled/<FQDN>.conf : httpの設定ファイル
- /etc/apache2/sites-enabled/<FQDN>-ssl.conf : httpsの設定ファイル
- /var/www/<FQDN>/ : ウェブコンテンツのルートディレクトリ
旧VPSの設定ファイルについては古いものをベースにしているので
新VPSのデフォルト設定ファイルに差分編集する形とし、
コンテンツについてはそのまんま持ってくれば動くだろうと
考えていたのですが…甘かったorz
まずPHPのスクリプトが上手く動かないところがある。
これPHP新しくなりすぎて、
以前使っていたsplit()が使えなくなっていました。
これはexplode()に変えることで事なきを得ました。
が、ここからが大変。
ウェブコンテンツをMySQLのユーザ管理テーブルを基に
httpsのユーザ認証をコンテンツ側の".htaccess"でかけていたのですが、
これが全く動かない。
調べていると最近は以前とは違う方法をとる必要があるっぽい。
しょうがないので、まずは以下のコマンドで認証システムを入れます。
# apt install libaprutil1-dbd-mysql # a2enmod dbd # a2enmod authn_dbd # systemctl restart apache2そして"/etc/apache2/apache2.conf"の最後に DBDPersist On DBDMin 1 DBDMax 10 DBDriver mysql DBDInitSQL "SET NAMES utf8" DBDParams "host=localhost port=3306 dbname=<データベース名> user=<データベースにアクセスできるユーザ名> pass=<そのユーザ名のパスワード>" を追加します。
これつまり1つのウェブサーバで複数のバーチャルホストを運用する場合も
認証に使えるデータベース名は共通にする必要があるということです。
それから"/var/www/<FQDN>/html/.htaccess"を廃止して、
それの中身を確認しつつ、 "/etc/apache2/sites-enabled/<FQDN>-ssl.conf"の最後の
</VirtualHost>
</IfModule>
の直前に
<Directory /var/www/<FQDN>/html> AuthType Basic AuthName "<コンテンツ名>" AuthUserFile /dev/null AuthBasicProvider dbd AuthDBDUserPWQuery "SELECT password FROM users WHERE name = %s" Require valid-user </Directory>を追加します。
これは先のデータベースに[users]テーブルを作成し、
その中に[name]フィールドと[password]フィールドを作って、
ユーザ名とパスワードの組のレコードを入れておけばいいです。
テーブル名やフィールド名は必要に応じて変更すればいいでしょう。
ただし[password]の値には注意が必要です。
# htpasswd -bns <ユーザ名> <パスワード>を実行すると
<ユーザ名>:{SHA}<パスワードのハッシュ値のBase64エンコード文字列>
が表示するので、MySQLの該当データベースにログインして
mysql> update users set password='{SHA}<パスワードのハッシュ値のBase64エンコード文字列>' where name='<ユーザ名>';
などと実行してパスワードを設定しておく必要があります。パスワードをウェブアプリ側で変更できるようにしているのなら、
頑張ってそのへんも変更しましょう。
0 件のコメント:
コメントを投稿