nginx:在stderr中发送的FastCGI:“主脚本未知”

在64位的arch linux上使用最新版本的nginx(1.10.0)和php-fpm(PHP 7.0.6)。

当试图请求index.php DokuWiki安装,我得到以下错误:

2016/05/21 22:09:50 [error] 11099#11099: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.70.3, server: doku.test.com, request: "GET /install.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:", host: "doku.test.com" 

这里是相关的服务器configuration:

 server { listen 80; server_name doku.test.com; root /var/www/doku/public_html/; access_log /var/log/nginx/scripts.log scripts; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 

这里是fastcgi_params:

 fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; 

在我的服务器configuration中可以看到,我正在尝试loggingSCRIPT_FILENAME参数的输出,因为我所有的研究似乎都指向了这个概念。 这里是nginx.conf的相关部分:

 log_format scripts '$document_root$fastcgi_script_name > $request'; 

请求index.php页面时,会在scripts.log生成以下scripts.log

 /var/www/doku/public_html/index.php > GET /index.php HTTP/1.1 

对该文件做一个ls:

 -rwxr-xr-x 1 nginx nginx 182 May 21 06:45 /var/www/doku/public_html/index.php 

值得注意的是,nginx守护进程和php-fpm守护进程都被configuration为使用nginx组作为nginx用户运行。 我不知道为什么我在logging中获得最初的错误,因为SCRIPT_FILENAME确实指向了正确的path。

在我查看的所有ServerFault答案中,添加了参数到服务器configuration似乎是我的错误的第一个解决scheme,但它似乎并没有解决我的情况。

有什么build议么?

首先检查您是否在www.conf文件中为PHP-FPM(FastCGI Process Manager)设置了正确的监听地址。 所以打开www.conf文件(位置: /etc/php5/fpm/pool.d/www.conf ),它应该看起来像这样:

 Start a new pool named 'www'. [www] ;prefix = /path/to/pools/$pool user = www-data group = www-data listen = 127.0.0.1:8080 ; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0660 listen.owner = www-data listen.group = www-data listen.mode = 0660 

在监听地址下,检查是否设置了环回地址(它标识你的服务器)和端口号。 然后在你的nginx.conf文件中把fastcgi_pass改为127.0.0.1:8080 ,所以最后应该看起来像这样:

 server { listen 80; server_name doku.test.com; root /var/www/doku/public_html/; access_log /var/log/nginx/scripts.log scripts; location ~ \.php$ { include fastcgi_params; fastcgi_pass 127.0.0.1:8080; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 

注意我在示例中使用了端口8080,您可能需要修改它。