インターネットなこと: 2012年5月アーカイブ


BASIC認証がうまくいかない件は、ちょっと原因を間違えていた。

httpd -t でエラーが出なくなっているのに、BASIC 認証しているページにアクセスすると Internal Server Error になるので、Order ディレクティブを直さないといかんのだろうと漠然と思ってたんだが、さっきエラーログを確認すると、Invalid command 'AuthUserFile' のようなエラーが出てた。

結局、httpd -t では .htaccess の記述まではチェックしないんでエラーが出てなかっただけで、根は httpd.conf の修正と一緒。
AuthUserFile ディレクティブを解釈するための authn_file_module モジュールが読み込まれていないというだけの話で、例えば、

LoadModule authn_file_module modules/mod_authn_file.so

を httpd.conf に追加するだけでいい。

そもそも(別のディレクティブのエラーを消そうとして)、access_compat_module を既にロードしているので、Order ディレクティブを Require ディレクティブに修正する必要はなく、アクセスコントロールの記述はそのまま使えるということのようだ。

ということで、例えば

AuthUserFile /usr/local/hogehoge/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user

という内容の .htaccess であれば、

LoadModule authn_core_module modules/mod_authn_core.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so

というモジュールのロードを httpd.conf に追加することで、BASIC 認証も問題なく行えるようになった。

でも、まあ、これはうちの環境の話であって、場合によっては authz_host_module もロードしないといけないとかありそうだね。

つーか、今思ったんだけど、最初から外部モジュール全部ロードすりゃ良かったな。
全部ロードしても、そんなに重くなることもないやろ。2.2の時には内蔵してたんだし。

何か、session_cookie_module(mod_session_cookie.so)とか、env_module(mod_env.so)とか、この先必要になってハマったりとかありそうだしなあ。
自社サーバの話。

現在稼働中の Apache 2.2.19 が、mod_rewrite や mod_proxy を使えるように make してなかったので、再インストールするついでにバージョン上げとくか・・・と軽く考えたのが失敗だった(^^;

2.2系から、2.4系ってけっこう大幅に変更がかかってんのね・・・

インストール自体は今までの Apache 同様にすぐ終わったんだけど(ソースからコンパイルした)、httpd.conf とか、2.2系のものをそのまま使うのって無理なんじゃね。
まあ、そのへんは既に有名な話みたいで、「Apache 使い」なら知っていて当然のようなんだが、ここのところ Apache のセットアップ案件ってなかったし、別件で忙しくて、その手の話題を全然追っかけてなかったんだわ・・・と言い訳しとく(笑)
もっとも、大事なサーバの Apache なら、2.4系にするなんてことせんけどね。2.2系の最新の 2.2.22 にしてたわな。

新しく設定ファイルを全部書きなおすんなら問題ないんだけど、ただ、うちのサーバも、テスト用に色々 VirtualHost 立ててるし、https サーバも動いてるし、出来ればそのまま 2.2.19 で使ってた設定ファイル使いたいのよ。

ちゅーことで、以下のような対応をして、取り敢えず BASIC 認証かけてるサイト以外は CGI や PHP も含めて動くようになった。

・機能がモジュールに切りだされていて、ちゃんと LoadModule しないとエラーになるもの多数。
 例えば、unixd_module をロードしておかないと Invalid command 'User' になるとか、mime_module をロードしておかないと、Invalid command 'AddHandler' になるとか。
 結局、うちの設定だと、以下のようなモジュールのロードが必要だった。

LoadModule unixd_module modules/mod_unixd.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule mime_module modules/mod_mime.so
LoadModule alias_module modules/mod_alias.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule cgid_module modules/mod_cgid.so

・Ignoring deprecated use of DefaultType なエラーになるので、httpd.conf から DefaultType text/plain の行は削除。

・NameVirtualHost has no effect and will be removed in the next release なエラーが出るので、extra/httpd-vhosts.conf から該当行を削除。

・extra/httpd-ssl.conf の SSLMutex 行は、Mutex default ssl-cache に変更。

まあ、こう書くと簡単なんだけど、実際には Invalid command になったディレクティブがどのモジュールに関係しているかとか、なかなかそのものズバリの資料がなくて苦労したわ。

後は、BASIC 認証のためのアクセスコントロール設定の記述が、

Order allow,deny
Allow from all

であれば、

Require all granted

のように修正しないといかんらしい。

いっぱいあるよ、そういう記述。全部直すのか。やれやれ。(ま、このサーバで公開しているのは、ごく内輪のメンバー向けサイトかテストサイトだけなので、気楽に修正していくけどねぇ~)

<追記>
BASIC 認証がうまくいってなかったのは、単純にまだ必要なモジュールがロードされてなかっただけだった。

このアーカイブについて

このページには、2012年5月以降に書かれたブログ記事のうちインターネットなことカテゴリに属しているものが含まれています。

前のアーカイブはインターネットなこと: 2012年4月です。

次のアーカイブはインターネットなこと: 2012年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら