ワイ、そして IT ときどき何か。

日々のとりとめのない記録

Nginx の覚書

Forbidden 403 (Permission denied)サーバエラーとの格闘の末、
VMware Fusion 上の CentOS 6 で Nginx の設定したものは以下のとおり。
なお、Nginx と php-fpm のインストールや chkconfig の設定などは端折ってる。
# は スーパーユーザ(root)で行う。一部はグループ名でもいいが、ややこしいかもしれないので、念のためユーザ名で統一している。自信ニキはグループ名とユーザ ID は適宜入力してや。

1. SELinux の無効化

# setenforce 0
# getenforce
Permissive

2. ユーザ名の統一([ユーザ名]という箇所は 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 = [ユーザ名]

3. パーミッションと所有者変更(キャッシュと 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/

バーチャルホストを使う場合は、該当するディレクトリにも chmodchown を忘れずに。

4. Nginx の HTTP レスポンスヘッダからバージョンを隠す

# vi /etc/nginx/nginx.conf
(http {...}内に以下の項目を追加する。バーチャルホストでもいいなら /etc/nginx/conf.d/default.conf のそれぞれの server {..} の中に入れる)
server_tokens off;

5. 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 のパスのパーミッションとオーナー変更の項目を追加しました。