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を呼べるようにするには設定が必要
security.limit_extensions = .php .html
php-fpm
Nginxだとファイルが見つからなかった際に403になる。
エラーログではPrimary script unknown
と出力される。
よくあるのはnginxの設定でSCRIPT_FILENAME
を変更しそびれた場合。