Forbidden 403 (Permission denied) とサーバエラーとの格闘の末、 VMware Fusion 上の CentOS 6 で Nginx の設定したものは以下のとおり。 なお、Nginx と php-fpm のインストールや chkconfig の設定などは端折ってる。
は スーパーユーザ(root)で行う。一部はグループ名でもいいが、ややこしいかもしれないので、念のためユーザ名で統一している。自信ニキはグループ名とユーザ ID は適宜入力してや。
- SELinux の無効化 # setenforce 0
getenforce
Permissive
- ユーザ名の統一([ユーザ名]という箇所は apache なり nginx なり www-data なり統一できる任意のものにする) # adduser -u [ユーザ名] -g [ユーザ名] -d [/var/html/など] -s [/bin/bash など] [ユーザ名]
passwd [ユーザ名]
(パスワードの入力)
vi /etc/nginx/nginx.conf
user [ユーザ名](デフォルトは nginx)
vi /etc/php-fpm.d/www.conf
user = [ユーザ名](デフォルトは www-data) group = [ユーザ名]
- パーミッションと所有者変更(キャッシュと web 用のファイルとディレクトリ) # chmod -R 0777 /var/cache/
chown -R [ユーザ名]:[ユーザ名] /var/cache/nginx
chmod 0777 /var/html(←サーバのパス)
.php ファイルすべてを chmod 0755 で設定する。やり方は端折る。セキュリティを無視するニキなら # chmod -R 0777 /var/html や
chown -R [ユーザ名]:[ユーザ名] /var/html
chown -R [ユーザ名]:[ユーザ名] /var/lib/php/session/
chmod 0777 /var/lib/php/session/
バーチャルホストを使う場合は、該当するディレクトリにも chmod と chown を忘れずに。
-
Nginx の HTTP レスポンスヘッダからバージョンを隠す # vi /etc/nginx/nginx.conf (http {…}内に以下の項目を追加する。バーチャルホストでもいいなら /etc/nginx/conf.d/default.conf のそれぞれの server {..} の中に入れる) server_tokens off;
-
SFTP でファイルをアップするユーザも同一の[ユーザ名]にする。
後はそれぞれを再起動する。 # service nginx restart
service php-fpm restart
HTTP レスポンスヘッダの確認はクライアントサイドの Terminal(コマンドライン) から以下を入力して確認。 $ HEAD / HTTP/1.1 host:[IPアドレスもしくはドメイン] User-Agent:MSIE 7.[リターン(エンター)を二回押す]
HTTP/1.1 200 OK Server: nginx Date: Fri, 05 Dec 2014 14:40:49 GMT Content-Type: text/html Last-Modified: Fri, 05 Dec 2014 06:18:39 GMT Connection: keep-alive nginx の右にバージョンがない場合は問題なし。
今のところ、MySQL を使った Web アプリも phpMyAdmin も問題なく動いている。 エラーが発生したらとりあえず # tail -f /var/log/nginx/error.logのように、自分が設定したエラーログのパスに tail -fをして、クライアントのブラウザからリロードするなりして逐一確認する。大体はパーミッションデニードさんからのヨロシクニキーなケースが多い。
2014年12月7日追記 : session のパスのパーミッションとオーナー変更の項目を追加しました。