apache で、httpd.conf の内容を変更して restart しても、うまく反映されない場合。
apache (いまだ2.2) で、バーチャルホストを設定したくて、変更したが、途中でエラーたくさん出しながら変更に次ぐ変更、頻繁な restart をしたら、とうとう 設定が反映されなくなった。最初は、httpd.conf の書き方が間違ったかな、と思ったが、どうやら違うようだった。
errorログを見ると、
C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
のようなものが出ていて気になる。ちゃんと終わってないんじゃないかなぁ、的なことはわかる。
さっきやったミスで、couldn't perform authentication. AuthType not set! が出てきちんとバーチャルホストの設定が反映されてないが、これは httpd.conf を書き換えてもこれ以上反映されてないからだ。
これには、一度 apache を「停止(stop)」する必要がある。
タスクマネージャーから停止しようとしても、「アクセスが拒否されました」と出て停止できない。
コマンドプロンプトからやっても停止できない。(httpd -k stop)
停止するには、コマンドプロンプト(command prompt)を 「管理者権限」 で立ち上げて (run as Administrator)、
httpd.exe の場所に移動し (僕の場合 cd C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin)
httpd -k stop とする。
(新しいwindows では、コマンドプロンプトに代わりWindows PowerShell となりました。Windows PowerShell(管理者[administrator]) でやってください)
あとは、再起動すればよい(Be sure to Reboot the PC)。そこまでてんてこ舞いになったら、たぶんちゃんとした httpd.conf も書けているだろうから、バーチャルホストはうまくいくはず。(バーチャルホストの設定をちゃんとかけてない場合は、再起動しても時間の浪費です)
バーチャルホストにするための手順を一応書くと(ちゃんと「バーチャルホスト」で調べてください)、
① httpd.conf で、Include conf/extra/httpd-vhosts.conf を有効にする。(行頭の「#」を取り外す。)
② httpd-vhosts.conf に、
<VirtualHost *:80>
DocumentRoot "D:/mydir/local1"
ServerName localhost1
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "D:/mydir/local2"
ServerName localhost2
</VirtualHost>
のように記述する(ファイル中のサンプルは消してしまうか、用心深くしたいなら、「#」でコメントアウトする (各行頭に#をつける) )
③ (再び) httpd.conf 内、
Apache 2.2 の場合
<Directory "D:/mydir/local1">
Order allow,deny
Allow from all
</Directory>
<Directory "D:/mydir/local2">
Order allow,deny
Allow from all
</Directory>
Apache 2.4 の場合
<Directory "D:/mydir/local1">
Require all granted
</Directory>
<Directory "D:/mydir/local2">
Require all granted
</Directory>
を、書き加えて追加。(これらの順番自体はどうでもよい。説明の順序上こうなりました。※下線部分は、自分のパソコンのバーチャルホストにしたいフォルダ名:だから、"mydir/local1", "mydir/local2" とそのまま書くのではなく、具体的に書く)
④ C:\Windows\System32\drivers\etc にある、「hosts」というファイルの最後の行に、
127.0.0.1 localhost1
127.0.0.1 localhost2
と追加する。
以上が要点。
これで、ブラウザから、http://localhost1/xxx.html とか、http://localhost2/yyy.html のようなアドレスでアクセスできる。
最後に、restart。スペルミスや、いろいろな勘違いがあって、apache を怒らせてしまった場合は、さっきの手順で、停止&再起動。
なお、httpd -k stop の後に、httpd -k start 。で再び立ち上がらせたら、手っ取り早いかな、と今思ったけど、試してないのでわかりません。
アディオス。
あぁ、あと、localhostのページが以前のままで困る場合は、「インターネットオプション」からの「削除」から、「履歴」や「ダウンロードの履歴」を選択して削除。削除完了まで時間がかかり削除されるまでは反映されない。瞬間的な反映状況を調べたい場合や、これはホームページ作成でも使えるテクニックだがページ右クリックから現れる「最新の情報に更新」を選ぶ。
errorログを見ると、
C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
のようなものが出ていて気になる。ちゃんと終わってないんじゃないかなぁ、的なことはわかる。
さっきやったミスで、couldn't perform authentication. AuthType not set! が出てきちんとバーチャルホストの設定が反映されてないが、これは httpd.conf を書き換えてもこれ以上反映されてないからだ。
これには、一度 apache を「停止(stop)」する必要がある。
タスクマネージャーから停止しようとしても、「アクセスが拒否されました」と出て停止できない。
コマンドプロンプトからやっても停止できない。(httpd -k stop)
停止するには、コマンドプロンプト(command prompt)を 「管理者権限」 で立ち上げて (run as Administrator)、
httpd.exe の場所に移動し (僕の場合 cd C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin)
httpd -k stop とする。
(新しいwindows では、コマンドプロンプトに代わりWindows PowerShell となりました。Windows PowerShell(管理者[administrator]) でやってください)
あとは、再起動すればよい(Be sure to Reboot the PC)。そこまでてんてこ舞いになったら、たぶんちゃんとした httpd.conf も書けているだろうから、バーチャルホストはうまくいくはず。(バーチャルホストの設定をちゃんとかけてない場合は、再起動しても時間の浪費です)
バーチャルホストにするための手順を一応書くと(ちゃんと「バーチャルホスト」で調べてください)、
① httpd.conf で、Include conf/extra/httpd-vhosts.conf を有効にする。(行頭の「#」を取り外す。)
② httpd-vhosts.conf に、
<VirtualHost *:80>
DocumentRoot "D:/mydir/local1"
ServerName localhost1
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "D:/mydir/local2"
ServerName localhost2
</VirtualHost>
のように記述する(ファイル中のサンプルは消してしまうか、用心深くしたいなら、「#」でコメントアウトする (各行頭に#をつける) )
③ (再び) httpd.conf 内、
Apache 2.2 の場合
<Directory "D:/mydir/local1">
Order allow,deny
Allow from all
</Directory>
<Directory "D:/mydir/local2">
Order allow,deny
Allow from all
</Directory>
Apache 2.4 の場合
<Directory "D:/mydir/local1">
Require all granted
</Directory>
<Directory "D:/mydir/local2">
Require all granted
</Directory>
を、書き加えて追加。(これらの順番自体はどうでもよい。説明の順序上こうなりました。※下線部分は、自分のパソコンのバーチャルホストにしたいフォルダ名:だから、"mydir/local1", "mydir/local2" とそのまま書くのではなく、具体的に書く)
④ C:\Windows\System32\drivers\etc にある、「hosts」というファイルの最後の行に、
127.0.0.1 localhost1
127.0.0.1 localhost2
と追加する。
以上が要点。
これで、ブラウザから、http://localhost1/xxx.html とか、http://localhost2/yyy.html のようなアドレスでアクセスできる。
最後に、restart。スペルミスや、いろいろな勘違いがあって、apache を怒らせてしまった場合は、さっきの手順で、停止&再起動。
なお、httpd -k stop の後に、httpd -k start 。で再び立ち上がらせたら、手っ取り早いかな、と今思ったけど、試してないのでわかりません。
アディオス。
あぁ、あと、localhostのページが以前のままで困る場合は、「インターネットオプション」からの「削除」から、「履歴」や「ダウンロードの履歴」を選択して削除。削除完了まで時間がかかり削除されるまでは反映されない。瞬間的な反映状況を調べたい場合や、これはホームページ作成でも使えるテクニックだがページ右クリックから現れる「最新の情報に更新」を選ぶ。