n.r*_*.r. 6 nginx fastcgi php-fpm
显然我不是唯一一个遇到这个问题的人,但是在尝试了针对情侣的每一个建议解决方案之后,我发现我不知道该怎么办。
我正在运行 Ubuntu 16.04、NGinx 和 PHP-FPM。
nginx.conf 是默认的,我只设置了一种信息更丰富的日志格式。
用户权限似乎没问题:NGinx 和 PHP_FPM 在用户 www-data 下运行。文档根所有者是 www-data。FPM-Pool 所有者是 www-data。套接字文件存在并且可写。
我已经尝试将文件夹和文件权限设置为最弱(chmod 777):没有结果。
这是我的 server.conf,正如您从注释行中看到的那样,我尝试了很多技巧 - 但没有效果:
server {
listen 8080;
# listen 8080 default_server;
# listen [::]:8080 default_server;
server_name example.com www.example.com
root /var/www/nginx/;
index index.php;
access_log /var/log/nginx/scripts.log scripts;
gzip on;
gzip_comp_level 3;
gzip_types text/plain text/css application/javascript image/*;
location ~ \.php$ {
if ($uri !~ "^/uploads/") {
fastcgi_pass unix:/run/php/php-fpm-www.sock;
}
include fastcgi.conf;
# include snippets/fastcgi-php.conf;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
# Block access to .htaccess
location ~ \.htaccess {
deny all;
}
}
Run Code Online (Sandbox Code Playgroud)
这是 fpm-pool 配置:
[www]
listen = /run/php/php-fpm-$pool.sock
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
php_admin_flag[allow_url_fopen] = off
php_admin_flag[allow_url_include] = off
php_admin_value[memory_limit] = 128M
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
chroot = /var/www/nginx/
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
catch_workers_output = yes
Run Code Online (Sandbox Code Playgroud)
这是 nginx 的 access.log 的输出:
/var/www/nginx/index.php > GET /index.php HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
这就是实际的 error.log:
2018/08/29 17:34:27 [error] 24020#24020: *47 FastCGI sent in stderr: "Unable to open primary script: /var/www/nginx/index.php (No such file or directory)" while reading response header from upstream, client: 213.61.37.18, server: example.com, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php-fpm-www.sock:", host: "example.com:8080"
Run Code Online (Sandbox Code Playgroud)
在 @michael 的提示后,我自己发现了错误 - 感谢您的启发。
我正在使用 chroot,因为目标是将每个网站“监禁”在它自己的环境/文件夹中。因此,我将此特定环境的根设置为真实文件系统位置/var/www/nginx。
在 NGinx 的服务器配置中,我传递了带有前导 $document_root 的 fastcgi 参数 SCRIPT_FILENAME。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
在 NGinx 中 $document_root 引用根指令。$document_root 当然是/var/www/nginx
但是 PHP环境有一个“更改的根”(/ 表示 /var/www/nginx)。这意味着 PHP 现在正在文件夹 /var/www/nginx 中查找 index.php。但由于根文件夹只是“虚拟”的,PHP 的 /var/www/nginx 实际上指向真实文件系统上的这个位置:/var/www/nginx/var/www/nginx。
因此将参数更改为此将修复错误。
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18964 次 |
最近记录: |