読者です 読者をやめる 読者になる 読者になる

tkuchikiの日記

Linux やプログラミングについて書きます。

apache の Directory ディレクティブの重複しているパスを出力する

Apache bash command CLI

検証した apache のバージョンは、2.2.29 です。

apache の VirtualHost が大量にある環境で、
Directory ディレクティブのパスが重複しており、
意図しない設定で上書きされてしまう問題に苦しめられました。
ので、それを解決する方法です。

以下のスクリプトを実行すると、重複しているパスを出力することができます。

実行例は、以下のようになります。

$ tree conf/
conf/
├── conf1
└── conf2

0 directories, 2 files
$ cat conf/conf?
<Directory /path/to/dir>
</Directory>
<Directory /path/to/dir/>
</Directory>
$ grep -h -r '<Directory' conf/ | sed -e 's/"//g' | sed -e 's/<Directory \(.*\)>/\1/' | sed -e 's/ *//g' | sed -e 's/\/$//' | sort | uniq -c | awk 'BEGIN { status=0 } { if ($1 > 1) { print $2; status=1} } END { exit status }'
/path/to/dir
$ echo $?
1

末尾に / があるパスとないパスが混ざっていても、
同一のパスとして認識してくれます。
また、awkステータスコードを返すようにしていますので、
重複したときの処理も簡単に書けると思います。

以下は、configtest 時に実行するようにする例です。