リンク

コンパイルとインストール

tar xfz httpd-2.2.15.tar.gz
cd httpd-2.2.15
./configure --prefix=/www --enable-rewrite --enable-so
make
make install
  • ZendFrameworkやら、CakePHPでmod_rewriteを使うので、--enable-rewrite。
  • PHPをDSOで使うため、--enable-so

CentOS で 2.4系を使う場合

2.4系から APR (Apache Portable Runtime) が同梱されなくなって、ややこしいらしい。

詳しく調べて突破した方のページを参照。

apache 2.4 source install - うまい棒blog

自動起動設定(CentOS)

service コマンドや chkconfig を使って設定を操作できるほうがうれしいので、ルールに従ったスクリプトを作る。 ただ、スクリプトの中身はシンプル。 ファイルの有無とかチェックなし。

#!/bin/sh
#
# chkconfig: 35 85 15
# description: apache2.2.x

apachectl="/www/bin/apachectl"

case "$1" in
       start|stop|restart|fullstatus| \
       status|graceful|graceful-stop| \
       configtest|startssl)
           $apachectl $@
           ;;
       *)
           ;;
esac

これを /etc/init.d/httpd として保存。chmod で実行権付与。

あとは chkconfig --add httpd とすれば、あとは service コマンドで起動他の操作が簡単にできる。便利。

mod_rewriteをあとから組み込む

 httpd-2.2.15にて、

cd httpd-2.2.15/modules/mappers
apxs -c mod_rewrite.c
apxs -i -a -n rewrite mod_rewrite.la

 これで、modules/mod_rewrite.so ができてるので、あとはhttpd.confでLoadModule?を指定すればいい

 もちろん、./configure --enable-rewriteとしてコンパイル/再コンパイルしてる場合は上記は不要(つーか、やると当然、重複エラーがでる)。

httpreadyな件

[warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter

と警告が出ることがある。 FreeBSD+httpd2.2系ではいつも出る。

対応は、rootにて下記の通り。

# kldload accf_http.ko

あと、/boot/loader.confに以下を追加。

accf_http_load="YES"

同様のもので、

[warn] (2)No such file or directory: Failed to enable the 'dataready' Accept Filter

というのが出ることがある。こちらは、

# kldload accf_data.ko

とする(拡張子を省略して accf_data だけでも可)。

また、/boot/loader.conf には以下を追加する

accf_data_load="YES"

以上。

HTTP Trace対策

Apache と PHP のバージョン表記を隠す

Apache + PHP で初期設定のままだと、バージョン情報は結構たくさん表示されてしまう。

次のように。

% telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 04 Jan 2010 12:22:39 GMT
Server: Apache/2.2.14 (Unix) PHP/5.2.12
X-Powered-By: PHP/5.2.12
Cache-Control: no-cache
Pragma: no-cache
Connection: close
Content-Type: text/html; charset=EUC-JP

Connection closed by foreign host.
%

Apache のバージョン、PHP のバージョン、OS情報(Unixだけだけど)が出てる。

バージョン情報は出ない方がいいので、まず Apache の設定をいじる。

httpd.conf に以下の定義をする。

ServerTokens Prod

この ServerTokes? ディレクティブの初期値は Full となっていて、全部吐き出してくれるので、Prod にする。 こうすると、製品名(Apache)だけが表示されるようになる。

実際は、製品名すら不要なので、'Unknown Web Server' とか、任意の文字列を指定できると、もっといいのになとか思う。わざと IIS とか指定したりして。

このディレクティブを設定してから再度 telnet で確認してみると、

% telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 04 Jan 2010 12:24:10 GMT
Server: Apache
X-Powered-By: PHP/5.2.12
Cache-Control: no-cache
Pragma: no-cache
Connection: close
Content-Type: text/html; charset=EUC-JP

Connection closed by foreign host.
%

Server: のところが変わった。OS も表示されなくなった。

でも、PHP のバージョンがマイナーレベルまできっちり表示されているので、これはよくない。PHP はまだまだ頻繁にセキュリティホールが発見されるので、多くの脆弱性を内包している可能性が高いから。

ということで、PHP のバージョンも表示しないようにする。

これは、php.ini をいじる。

expose_php というディレクティブがあるので、これをオフにする。初期値はオンになってる。

配布ファイル(tarball)を展開すると、php.ini は、php.ini-dist と、php.ini-recommended の2種類が出てきて、そのどちらからを /usr/local/lib/php.ini として配置するなどするんだけど、せめて recommended の方は、これをオフにしててもよさそうなもんだけどなあ…

expose_php = Off

さて、変更したら apache のサービスを再起動させて、再度 telnet で確認してみる。

% telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 04 Jan 2010 12:25:32 GMT
Server: Apache
Cache-Control: no-cache
Pragma: no-cache
Connection: close
Content-Type: text/html; charset=EUC-JP

Connection closed by foreign host.
%

これですっきり。

Mac OS X (10.7 Lion) の apache2

「Web共有」という名前で、デフォルトでインストール済み。

各ファイルの位置は以下の通り。 よく使ってきた位置とはずいぶん違っているので戸惑った。

ファイルパス
ユーザごとの設定ファイル/etc/apache2/users/(ユーザ名).conf
全体設定/etc/apache2/httpd.conf
モジュール/usr/libexec/apache2
ログ/private/var/log/apache2

Allow や Deny の定義行にコメント書いたらダメ

以下のような書き方はダメ。

Allow from 192.168.1.0/24  # Home

Allow/Deny ディレクティブは、引数をいくつも取るけど、スラッシュを含まない文字列を見ると「ホスト名だ」と判断してしまう。結果、アクセスしてきた IP アドレスを逆引きして照合する。無駄だ。

ということで、なんか気持ちは良くないんだけど、以下のように書くしかない。

Order Deny,Allow
Deny from All
  # Home
  Allow from 192.168.1.0/24
  # Office
  Allow from 192.168.100.0/24

見づらい。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS