我在 CentOS 5 机器上安装了带有 PHP-FPM 的 nginx,但我很难让它为我的任何文件提供服务——无论是否是 PHP。
Nginx 以 www-data:www-data 运行,默认的“Welcome to nginx on EPEL”站点(由 root:root 拥有,具有 644 权限)加载正常。
nginx 配置文件有一个 /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 由具有 2777 文件权限的 www-data:www-data 所有,但该站点无法提供任何内容 -
[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 权限才能访问该文件。检查 /、/home、/home/demo 等的权限以获取 www- data x 访问权限。我的猜测是 /home 可能是 770 并且 www-data 不能通过它来访问任何子目录。如果是,请尝试 chmod o+x /home (或任何拒绝请求的目录)。
编辑:要轻松显示路径上的所有权限,您可以使用namei -om /path/to/check
namei -om /path/to/check