当configurationuserdir时,nginx fastcgi“主脚本未知”

我讨厌configurationnginx。 这太复杂了 我如何让PHP在我的用户目录中工作? 这里是我的nginx.conf的相关部分:

location ~ ^/~(.+?)(/.*)?$ { autoindex on; autoindex_exact_size off; alias /home/$1/public_html$2; location ~ \.php { include /etc/nginx/fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } } 

这给了我错误: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream在nginx错误日志中FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

这是我的/etc/nginx/fastcgi.conf

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 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 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; 

我假设nginx不能正确parsing脚本名称。 我讨厌不得不告诉nginx在哪里查看我的文件系统,为内置的(或者至less标准化和文档化的)function编写自定义的正则expression式。

问题是,在你的fastcgi.conf文件中,你将SCRIPT_FILENAME定义为$document_root$fastcgi_script_name; 但是你使用alias direcive来设置path。

您应该更新您的SCRIPT_FILENAME以使用$request_filename

如果您愿意,也可以返回到嵌套位置。 如果之后仍然出现这个错误,那么我已经在这里logging了所有的可能性: http : //blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

请检查,因为可能有多个其他原因。

当你定义redirect,别名和你使用fastcgi在你的网站在Nginx的conf你可以尝试这个让他们工作:

更改:

位置〜\ .php $ {

fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;

}

成:

位置〜\ .php $ {

fastcgi_param SCRIPT_FILENAME $ request_filename;
fastcgi_param REQUEST_URI $ uri?$ args;

}

如果这不起作用尝试使用如上所述没有REQUEST_URI,所以它将是:

位置〜\ .php $ {

fastcgi_param SCRIPT_FILENAME $ request_filename;

}

尝试在userdirs中为PHP脚本使用单独的location块。 这不需要嵌套。

 location ~ ^/~([^/]+)/(.+\.php)$ { alias /home/$1/public_html/$2; include /etc/nginx/fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; }