nginx – 无法打开主脚本

我收到错误消息:

FastCGI sent in stderr: "Unable to open primary script: /home/messi/web/wordpress/index.php (No such file or directory)" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: www.domain.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "www.domain.com

here are my configuration files:

/etc/php5/fpm/php.ini

 cgi.fix_pathinfo=0 doc_root = user_dir = .... 

/etc/php5/fpm/php-fpm.conf

 [global] pid = /var/run/php5-fpm.pid error_log = /var/log/php5-fpm.log include=/etc/php5/fpm/pool.d/*.conf 

/etc/php5/fpm/pool.d/www.conf

 [www] user = www-data group = www-data listen = /var/run/php5-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0666 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 chdir = / security.limit_extensions = .php .php3 .php4 .php5 php_flag[display_errors] = on php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on 

/etc/nginx/nginx.conf

 user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; server_tokens off; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/sites-enabled/*; } 

在/ etc / nginx的/启用的站点- / WordPress

 server { listen 80; server_name www.domain.com; root /home/messi/web/wordpress; error_log /var/log/nginx/err.wordpress.log; index index.php; location / { try_files $uri $uri/ /index.php?$args; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\. { deny all; } location ~* /(?:uploads|files)/.*\.php$ { deny all; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } } 

设置用户权限:

 #adduser www-data messi #chown -R www-data:www-data /home/messi/web #chmod -R 664 /home/messi/web/wordpress 

我该如何解决这个问题? 谢谢

SELinux在CentOS / RHEL 7+上会导致这个错误默认:(

为了测试SELinux是否是你的悲哀的根源,

 setenforce 0 

…看看是否一切正常。 如果解决了这个问题,你可以关闭SELinux(弱,你比这更好),或者你可以把它重新打开

 setenforce 1 

…然后妥善解决这个问题。

如果你这样做

 tail -f /var/log/audit/audit.log 

…你会看到SELinux的问题。 在我的情况下,它拒绝PHP-FPM访问网页文件。 您可以运行以下指令来修复它:

 setsebool -P httpd_can_network_connect_db 1 setsebool -P httpd_can_network_connect 1 

起初,这实际上并没有解决这个问题,但是恢复了SELinux环境

 restorecon -R -v /var/www 

希望有所帮助。

这可能是一个权限问题。

  1. 确保每个父目录对用户(nginx用户和/或php-fpm用户)具有+ x权限。

    您可以使用以下命令来检查这些权限: namei -om /path/to/file

  2. 如果你有符号链接,确保它们指向一个有效的路径。

  3. 确保chroots可以访问正确的路径。

  4. 确保SELinux(例如Fedora / Centos)或AppArmor(例如Ubuntu)或任何其他MAC安全系统不会干扰文件访问。

    对于SeLinux:检查/var/log/audit/audit.log或/ var / log / messages

    对于AppArmor:我不是一个Ubuntu用户,据我所知,AppArmor的日志记录并不总是很容易理解。 你可能会在这里查询信息: http : //ubuntuforums.org/showthread.php?t=1733231

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; -> fastcgi_param SCRIPT_FILENAME/home/messi/web/wordpress$fastcgi_script_name;