1. ホーム
  2. nginx

[解決済み】Nginx 403 forbidden for all files

2022-04-19 02:34:21

質問

CentOS 5 に PHP-FPM と共に nginx をインストールしていますが、PHP であろうとなかろうと、ファイルを提供するのに苦労しています。

Nginx は www-data:www-data として動作しており、デフォルトの "Welcome to nginx on EPEL" サイト (owner by root:root with 644 permissions) は正常にロードされます。

nginxの設定ファイルには、includeディレクティブで /etc/nginx/sites-enabled/*.conf, で、設定ファイル example.com.conf というように。

server {
 listen 80;

 Virtual Host Name
 server_name www.example.com example.com;


 location / {
   root /home/demo/sites/example.com/public_html;
   index index.php index.htm index.html;
 }

 location ~ \.php$ {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  PATH_INFO $fastcgi_script_name;
  fastcgi_param  SCRIPT_FILENAME  /home/demo/sites/example.com/public_html$fastcgi_script_name;
  include        fastcgi_params;
 }
}

public_html が www-data:www-data によって所有され、2777 のファイル パーミッションを持つにもかかわらず、このサイトはコンテンツの提供に失敗しています -。

 [error] 4167#0: *4 open() "/home/demo/sites/example.com/public_html/index.html" failed (13: Permission denied), client: XX.XXX.XXX.XX, server: www.example.com, request: "GET /index.html HTTP/1.1", host: "www.example.com"

nginx から 403 を受け取ったという投稿は他にもたくさんありますが、私が見たほとんどは Ruby/Passenger を使ったより複雑な設定(過去に実際に成功しました)か、上流の PHP-FPM が関与している場合にのみエラーを受け取っているので、ほとんど参考にならないようです。

私はここで何か愚かなことをしたのでしょうか?

解決方法は?

よく見落とされるパーミッションの要件として、ユーザーがそのファイルにアクセスするためには、ファイルのすべての親ディレクトリでx個のパーミッションが必要であることが挙げられます。 www-data x アクセスのために /, /home, /home/demo, などのパーミッションをチェックしてください。 私の推測では、/home はおそらく 770 で、www-data はそれを通して chdir して、どのサブディレクトリにも行くことができないようです。 もしそうなら、chmod o+x /home (またはリクエストを拒否しているディレクトリ) を試してみてください。

EDIT: パスのすべてのパーミッションを簡単に表示するために namei -om /path/to/check