![Centos / vsFTPD / Nginx / php-fpm - 权限被拒绝(500 内部服务器错误)](https://linux22.com/image/803088/Centos%20%2F%20vsFTPD%20%2F%20Nginx%20%2F%20php-fpm%20-%20%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%EF%BC%88500%20%E5%86%85%E9%83%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%94%99%E8%AF%AF%EF%BC%89.png)
我安装了干净的 Centos 6.4 (x64) 最低版本(完全更新)。
操作系统设置完成后,我按照这个相对简单的指南来设置我的 FTP: http://www.krizna.com/centos/how-to-configure-ftp-server-on-centos-6/
SELinux is disabled.
anonymous_enable=NO (vsFTPD Config)
chroot_local_user=YES (vsFTPD Config)
我没有按照指南在 /ftp/[用户名] 上创建 Linux 本地用户帐户,而是选择使用标准位置 /home/[用户名],其中 [用户名] 是服务器(在我的设置中)
我测试了我的 FTP 服务器,它已安装并运行良好。因此,我登录 FTP 并创建了一个名为“public_html”的文件夹,然后在其中创建了一个包含<?php phpinfo(); ?>
代码的 index.php 文件。(因此完整路径是:/home/server/public_html/index.php)
然后,我安装了 nginx 和 php-fpm,并按照此顺序为每个文件创建以下配置文件。
/etc/php-fpm.d/server.conf(我的本地 nix acc: 服务器的 php-fpm 池):
[server]
listen = '/var/run/php-fcgi-server.sock'
listen.allowed_clients = 127.0.0.1
user = server
group = server
pm = static
pm.max_children = 5
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 200
php_admin_value[error_log] = /var/log/php-fpm/server-php-errors.log
php_admin_flag[log_errors] = on
php_admin_flag[display_errors] = on
/etc/nginx/conf.d/dev-minecraft.local.conf(nginx 虚拟主机):
upstream serverbackend {
server unix:/var/run/php-fcgi-server.sock;
}
server {
listen *:80 default;
server_name dev-minecraft.local;
root /home/server/public_html;
location / {
index index.html index.php;
try_files $uri $uri/ @handler;
expires 30d;
}
client_max_body_size 10M;
location /. {
return 404;
}
location @handler {
rewrite / /index.php;
}
location ~ .php/ {
rewrite ^(.*.php)/ $1 last;
}
location ~ .php$ {
if (!-e $request_filename) { rewrite / /index.php last; }
expires off;
fastcgi_pass serverbackend;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
现在,如果我没有通过浏览器访问该网站:http://dev-minecraft.local/我收到以下错误:500内部服务器错误
我在/var/log/nginx/error.log文件:
2013/07/22 12:58:07 [crit] 2039#0: *1 stat() "/home/server/public_html/" failed (13: Permission denied), client: 192.168.1.15, server: dev-minecraft.local, request: "GET / HTTP/1.1", host: "192.168.1.54"
2013/07/22 12:58:07 [crit] 2039#0: *1 stat() "/home/server/public_html/" failed (13: Permission denied), client: 192.168.1.15, server: dev-minecraft.local, request: "GET / HTTP/1.1", host: "192.168.1.54"
2013/07/22 12:58:07 [crit] 2039#0: *1 stat() "/home/server/public_html/index.php" failed (13: Permission denied), client: 192.168.1.15, server: dev-minecraft.local, request: "GET / HTTP/1.1", host: "192.168.1.54"
知道我在这里做错了什么吗?我在 WinSCP 中注意到一件事(通过 FTP 登录后),文件所有者/组设置为数字标识符(500),而不是帐户用户名“服务器”。这是 nginx/php-fpm 无法访问站点文件的原因吗?我该如何解决这个问题?
答案1
的权限/home/server
拒绝除其所有者之外的任何人访问。这就是其drwx------
含义。
要解决该问题,请允许其他用户进入该目录。
chmod a+x /home/server
答案2
肯定是权限问题。php-fpm 用户和 nginx 用户必须具有对目录中文件的读取权限。另外,您的 nginx 配置有点问题。请尝试以下操作:
client_max_body_size 10M;
index index.html index.php;
upstream serverbackend {
server unix:/var/run/php-fcgi-server.sock;
}
server {
server_name dev-minecraft.local;
root /home/server/public_html;
expires 30d;
location / {
location ~ \.php$ {
expires off;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass serverbackend;
}
try_files $uri $uri/ =404;
}
}