nny*_*yby 11 nginx fastcgi php-fpm
我讨厌配置 nginx。这太复杂了。如何让 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误:FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
在 nginx 错误日志中。
这是我的/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;
Run Code Online (Sandbox Code Playgroud)
我假设 nginx 没有正确解析脚本名称。我讨厌告诉 nginx 在我的文件系统中查看的位置,为应该内置(或至少标准化和文档化)的功能编写自定义正则表达式。
Mar*_*ald 10
问题是在您的 fastcgi.conf 中,您定义SCRIPT_FILENAME
为$document_root$fastcgi_script_name;
,然后使用alias
指令来设置路径。
你应该更新你SCRIPT_FILENAME
的使用$request_filename
如果您愿意,也可以返回嵌套位置。如果之后您仍然遇到此错误,那么我已在此处记录了所有可能性:http : //blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/
请检查,因为可能有多种其他原因。
当您定义重定向,别名并且您确实在 nginx 站点的 conf 中使用 fastcgi 时,您可以尝试使用以下方法让它们工作:
改变:
location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
...
}
进入:
location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REQUEST_URI $uri?$args;
...
}
如果这不起作用,请尝试在没有 REQUEST_URI 的情况下如上所述使用,因此它将是:
location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME $request_filename;
...
}
location
尝试在用户目录中为 PHP 脚本使用单独的块。这不需要嵌套。
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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52264 次 |
最近记录: |