我讨厌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; }