PHP
nginx
Apache
Ubuntu
php-fpm

nginxで403を回避するために、パブリックファイルの権限についておさらい

nginx初学者です。
PHPやPython(Flask)を動かすのにnginxを使ってみたら、やたらめったら403が出まくる。
なので、webサーバの権限についておさらいしておく。

ファイルの置き場は迷ったら/var/www

nginxのデフォルトのドキュメントルートは /usr/share/nginx/html となっている。

ただし、そこに自作ファイルを置くのは非推奨。ソフトウェアアップグレード時に邪魔になる可能性があるため。
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#using-the-default-document-root

ということで、apacheと同じ/var/www以下に置いておく。

使用するwebサーバを意識しない構成にする意味でもここで良さそう。

/var/www以下の所有者と権限

$USER:www-dataとする

$ sudo chown $USER:www-data -R /var/www

$USER はサーバ管理者のユーザ名を表す。
rootをそのまま使うのではなく別ユーザを作って、www-dataグループに追加するのが望ましい。

www-dataとは

www-dataは、webサーバの実行時のポピュラーなユーザ/グループ名。

apache, nginxともに設定ファイルから実行時のユーザ名が変更可能で、使用するwebサーバを意識したくないないならwww-dataにしておくのがベターかもしれない。

デフォルトでwww-dataになっていることもあれば、apache, nginxであったり、アプリケーションサーバに依存したユーザ名になっていることもある。

ファイルは644, ディレクトリは755

# 出典 https://qiita.com/takeshi81/items/48ea62eae2fc7f1cb2f0
find /path/to/dir -type d -exec chmod 755 {} +
find /path/to/dir -type f -exec chmod 644 {} +

書き込み権限はサーバ管理者のみが持つ想定。

セキュリティ上の理由から、webサーバには書き込み権限を与えないことが望ましく、またwww-dataユーザをwebサーバ以外の用途で使うのも避けるべし。

SELinuxについて

今回は関係なかったがSELinuxが関係して403が返ることもある。
こちらの記事を参考にされたし。
https://qiita.com/chi9rin/items/af532d0dd9237cc65741

php-fpmについて

以下はnginxでphpを用いる場合の話。

php-fpmの設定

php-fpmでhtmlのインラインphpを呼べるようにするには設定が必要

/etc/php/7.0/fpm/pool.d/www.conf
security.limit_extensions = .php .html

https://qiita.com/f-akazawa/items/a5d0bf61d78a052df85a

php-fpm

Nginxだとファイルが見つからなかった際に403になる。

エラーログではPrimary script unknownと出力される。

よくあるのはnginxの設定でSCRIPT_FILENAMEを変更しそびれた場合。

https://qiita.com/H-A-L/items/481eb70eeca4231ff82c