uzullaがブログ

uzullaがブログです。

Apacheをフォアグラウンドで動かす話

年末ですね、そうそう、ついに当方にもワードプレス案件がきてしまいまして、観念して開発環境としてApacheを用意することにしたんですけど、とにかくApacheもBuiltin Serverみたいなノリでシュッと立ち上げたいですよね。

だっていくつも開発案件をかかえてると設定がバラバラで、都度httpd.confを置き換えたりした後にservice httpd stopとかstartとか面倒ですよ(個人差はありそう)。

オチ

以下でおk

httpd -DFOREGROUND

って、これだけじゃ全然うれしくないじゃん

そうですね、コンフィグも指定できないと意味ないですね。

Linuxの場合、/etc/httpdをまるっと好きな所にコピーして(ここでは /var/www/httpdにコピーした) (後述のServerRootの罠があるので、/etc/httpdはとりあえずとっておいてね)

httpd -d /var/www/httpd -DFOREGROUND

ってすると良い感じになります、やったー!

終了は勿論 ^Cだよ*1

-f(コンフィグファイルの位置)オプションは-dオプションつければ(CentOSのetc構造を維持してるなら)別にいらないけど、まあ指定してもいいんじゃないですかね。

ログはどうする

そのままだと、ログはやっぱりファイルにでちゃうんだよね、PHPのBuiltin Serverはログが標準出力にでるのがいいよね、Apacheでもそれやりたい。

実はconfigのエラーログのファイル名を /dev/stdoutにするだけでOKだよ!

# 例
ErrorLog /dev/stdout
CustomLog /dev/stdout combined

やったぜ!

ほかにもPIDとかあるじゃん?

そうですね、行儀が良い人ならきになりますね。

粛々とファイルをかきかえたり、-C 'PidFile /tmp/pidfile01'とかやったりするといいんじゃないですかね。

ところで、ServerRootののろい

まあ、普通に考えて、上ができたらもう/etc/httpdとか削除したいよね、でも残念ながらhttpd.confの中に書いてあるServerRootのディレクティブは、完全にはCLIのオプションで上書きできないっぽいんだよね。

そもそも -d オプションがServerRootを指定するものなんだけど、最終的にはhttpd.confの中に書かれているやつが優先されちゃうので、「configロード時には」そこの下にあるconfはよんでくれるけど、次のフェーズの「moduleライブラリのロード時には」、コンフィグファイルの中のServerRoot(たとえば/etc/httpd)を見にいっちゃうっぽいんだよね。

(このあたりはapacheビルド時のconfigure オプションによって勿論様々ですが、CentOSデフォルトの場合です)

これ、-cオプションとかでもどうにかできんかとおもったけど、どうにもならんっぽい。まあ、コピーしたファイルを修正してもいいし、繰り返しになるけど、/etc/httpdをのこしておいてもいいので、まあいいかなっておもいました。イケてる解決策があればおしえてください。

(どうでもいいけど、httpdCLIオプションは和訳されてなくてヤヤウケです、まあ読まないよね。)

まとめ

php -Sがhtaccessとか全部サポートしてくれたらいいのに!」(違 「やった!これでApacheもSuperVisordで管理できるぞ!」(違

まあそれらは冗談としても、-CでListenするポートをかえたりとか、まあ色々やると色々便利な気がしますね…私だけかもしれませんけど。だってみなさんいまどきはVMとかオシャレなものをお使いになるんでしょう?

次回予告

今回のこれはlinuxだけど、勿論OSXでもできる(はずな)のでその話。そして、私はPHPerなのにPHPに触れてないのはダメですよね、そのうち書きます。(なんで今日かかかないのかといえば、Elcapitanで5.6系PHPのビルドでずっこけまくってて諦めたからです)がんばろ。

タイトルは「Homebrew?しらない子ですね…」を予定しております!

…一体誰得なんだ、俺だけじゃないのか…読みたい人はブクマかスターでもつけておいてください…。

あー、あと、Mysqlでもにたようなことをやるテクがあって、昔かいたんだけど焼き直そうかなっておもいます。

*1:一瞬で死なない事が多いので、じっと待とう