黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

Apacheの設定について

公開しっぱなしになっているApache

ブログのリンクやらtwitterのリンクしかはりつけていない存在価値が微妙な私のHP、よくよく考えてみると、当初の目的がLinuxの勉強がてら色々試そうというものだったことを思い出しました。
ソースからビルドしておいて満足してた感があったので、ちょっと弄ってみました。


どっこい

久々に見たhttpd_conf、デフォルトの状態からとりあえず大量のコメント行を除去した状態で放置してありました。
稼働しているのはわかっているのですが、なんとなくstatusを叩いてみたところ

$ /etc/init.d/httpd status

Not Found
The requested URL /server-status was not found on this server.


ポカーン。

け、研修では見れたはずなのですが…
改めてhttpd_confを眺めていると、server-statusの部分がごっそり消えていることがわかりました。
なんで消えているかって上述したコメント行を見境なく削除したからに他なりません。

仕方がないので、以下をhttpd_confに追記。

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from localhost
</Location>


ホストベースのアクセス制御はすぐに忘れてしまいますが、Order deny,allowの場合、以下の感じが覚えやすかったです。

access = "allow"
host = "all"
if host == "all":
    access = "deny"
    if host == "localhost":
        access == "allow"


で、意気揚々とrestartをかけようとしたら

$ /etc/init.d/httpd restart

(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs


次は何ですか…と調べると、WellknownPortがふってある場合はサービス起動にroot権限が必要になるらしいです。

とりあえずstatusは成功するようになりました。(実験のために一瞬server-statusが日本国内に開放されていたのは秘密である)


Options

Documentrootの設定のところで、Optionsという項目が存在します。
色々と設定値があるようですので、まとめ。

ExecCGI cgi-binディレクトリ以外でCGIプログラムを実行できる。
Includes SSIを許可する。
FollowSymLinks リンク先のファイルを参照する。
Indexes DirectoryIndexで指定されたファイルが内場合、ファイル一覧を表示する。
ALL 全てのオプションを利用。
None 全てのオプションを無効。
デフォルトではこのIndexesが有効になっていて、無駄にディレクトリ配下の一覧が生成されている状態だったので、これを無効にしたいと。 Indexesの前に-(マイナス)をつけると無効を明示できるとのことだったので、追記してからrestart。

# /etc/init.d/httpd restart

AH00526: Syntax error on line [行数] of [apacheのPATH]/httpd.conf:
Either all Options must start with + or -, or no Option may.


何か変更を加えると、必ず何か問題が起きますね。てへ。

ここでちょっとハマったのですが、ひとつの設定値に"-"をつけてしまうと、他の設定値にも符号をつけないといけなかったみたいです。
つまり、

Options -Indexes +FollowSymLinks


としてあげないとダメだったと。


とりあえず、今日はここまで。