apacheでシンボリックリンクが見えない場合の対処

仕事場のサーバーの一部が動かなくなったorz。
古い仮想化基盤のサーバーがHDDの不調のためかまともに動作しなくなってしまい、その上で動かしていた複数台のサーバーがどうにも動かなくなってしまった。
仕方が無いので新しい仮想化基盤に用意してあった同機能のサーバーに機能を移してサービスを再開したが、細かいトラブルがいくつか発生。
その中の一つにhttpdアクセスが出来ないというのがあった。
元々、ごく一部のユーザー向けにいくつかのディレクトリをブラウザで参照可能にするためにhttpdサーバー(apache)を動作させていたんだけど、ユーザーの指摘でそのことに気付くという体たらく(汗)。
最初に気付いたユーザー向けのサービスはhttd.confを弄ってDocmentRootを変更するだけで参照可能になったが、別のユーザーから指摘されたディレクトリにアクセスすると403エラー(Forbidden)で参照できない。
ファイルやディレクトリのパーミッションを見ても644(ディレクトリは755)で参照可能なはずなんだけど、何故か403になる。
問題のディレクトリはシンボリックリンクなので、リンク先のディレクトリも確認したがパーミッションの設定に問題は無い。
そこで調べてみると、apacheはデフォルトでシンボリックリンクの参照が可能なのは所有者ユーザーのみで他のユーザーがアクセスすると403になるらしい。
これを回避するにはhttpd.confで
Options Indexes SymLinksIfOwnerMatch
となっているのを
Options Indexes FollowSymLinks
に変更すると良いとのことだったので、問題のディレクトリのその部分を修正してhttpdをリスタートすると無事に参照可能になった。
ところが、問題はこれだけではなく、ディレクトリ名やファイル名に日本語(2byteコード)が使われており、そのままでは文字化けして読めない。
これは旧サーバーではEUCだったのが新サーバーではutf-8が標準のためデフォルトの設定ではヘッダーが、
Content-Type: text/html; charset=utf-8
となりブラウザ側はEUCの文字コードをutf-8として解釈しようとしたため。
これを直すにはhttpd.confの
IndexOptions charset=utf-8

IndexOptions charset=euc_JP
とすることで無事に日本語の文字が表示されるようになった。

←クリックしてくれると嬉しいです。
【広告】

コメントを残す