バックアップ用にNetatalkでファイルサーバを立てたので、 ついでにWeb上でファイルを公開するサーバを作っちゃえ と思い立ってNginxでちゃちゃっと作ってみたメモ。
今回は性的な静的なファイルを置くだけなので設定は極力シンプルに。
server { location / { root /home/hoto/public; } location ~ /\. { deny all; } error_page 404 =301 http://hotolab.net/404.html; }
5行\(^o^)/
Nginxはどこぞのhttpdと違って設定がシンプルに記述できてイイネ!!
説明するまでもないと思うが一応説明すると、
という感じ。
動かぬ
しかしこれが動かなかった。
むしろどこが間違ってんだよっていうレベルなのに。
なんか403エラー吐きよる。
とりあえずログを見る。
open() "/home/hoto/public/test.txt" failed (13: Permission denied)
ほほう。 権限が無いと。
$ ls -la /home/hoto/public/ total 16 drwxrwxrwx 3 hoto 4096 Jan 7 21:54 2014 . drwx------ 8 hoto 4096 Jan 7 22:08 2014 .. -rw-rw-r-- 1 hoto 9 Jan 7 20:17 2014 test.txt
あるやん(´Д`)
ディレクトリが777で、ファイルに読み込み権限があって、あとは何が不満か。
ググったら"SELinuxのせいだ"っていう記事を見つけたけどそもそもSELinux切ってあるし。
不思議だなーと思ってたけど、どうも上の階層のディレクトリに権限がないのが原因らしい。
apache を利用しての public_html が公開できない - 解 - いろきゅう.jp ~Programmable maiden~ Tech side
具体的には、
ホームディレクトリ( /home/hoto
)の権限が 700(drwx------)
になっていて、
ここのOtherに実行権限( o+x
)がないとダメらしい。
というわけで
$ chmod o+x /home/hoto/
これで動いた。
なんで実行権限がいるのかはわからない。
誰か教えて(´・ω・)
追記
教えていただきました。
@hoto17296 ディレクトリの実行権限とは、そのディレクトリに移動する権利だからです。ということではなく?
— Terra生まれの丁 (@gotoki_no_joe) January 7, 2014
そういうことでした。
ディレクトリのパーミッション r そのディレクトリを ls できる w そのディレクトリの中でファイルを作成・消去できる x そのディレクトリの中のファイルにアクセスできる