我正在尝试将我的系统更新到 PHP7-FPM 和 nginx,并根据我在网上找到的信息完成了使此设置正常运行所需的所有步骤(主要是https://ungeek.be/2016/08/php7-fpm-nginx-debian/,法语),但无济于事:nginx 一直向我抛出错误 500 页面,并且日志文件中没有具体的错误/信息。
Nginx 版本:nginx/1.10.3(软件包 nginx-full)PHP-FPM 版本:PHP 7.0.15-1(dotdeb)
以下是我遵循的步骤:
- 回显“debhttp://packages.dotdeb.orgjessie all" >> /etc/apt/sources.list.d/dotdeb.list wget -O-
- https://www.dotdeb.org/dotdeb.gpg| apt-key 添加 -
- apt-get 更新 && apt-get 升级 -y
- apt-get 安装 nginx-full
- apt-get 安装 php7.0 php7.0-bcmath php7.0-bz2 php7.0-cli php7.0-common php7.0-curl php7.0-dev php7.0-enchant php7.0-fpm php7.0-gd php7.0-geoip php7.0-imagick php7.0-intl php7.0-json php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-pspell php7.0-readline php7.0-sqlite3 php7.0-tidy php7.0-xml php7.0-xmlrpc php7.0-zip
- 配置了 /etc/php/7.0/fpm/pool.d/bookworm.conf(参见下面的配置)
- 创建并填充 /etc/nginx/sites-available/bookworm (参见下面的配置)
- ln -s /etc/nginx/sites-available/bookworm /etc/nginx/sites-enabled/
- 服务 nginx 重启 && 服务 php7.0-fpm 重启
我尝试调试此问题,但 /var/logs/nginx/* 和 /var/logs/php7.0-fpm.log 中均未记录任何错误(好吧,我收到的 500 错误没有任何记录)。生成的唯一消息如下:
127.0.0.1 - - [03/Feb/2017:00:39:53 +0100] "GET /app.php HTTP/1.1" 500 507 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
bookworm 站点文件(部分内容取自 Nginx 网站上的 Symfony 配方):
server {
listen 80 default_server; # with or without, doesn't matter
server_name some.hostname; # actually set to a resolvable server
root /opt/git/Bookworm/web/;
index index.php app.php;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
# DEV
location ~ ^/(app_dev|config)\.php(/|$) {
fastcgi_pass unix:/run/php/php7-fpm-pool_bookworm.sock; # the socket file exists
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/run/php/php7-fpm-pool_bookworm.sock; # the socket file exists
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# Prevents URIs that include the front controller. This will 404:
# http://domain.tld/app.php/some-path
# Remove the internal directive to allow URIs like this
# internal; # with or without, doesn't matter
}
# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
#location ~ \.php$ {
# return 404;
# }
error_log /var/log/nginx/bookworm_error.log;
access_log /var/log/nginx/bookworm_access.log;
location ~ /\.ht {
deny all;
}
}
池(bookworm.conf)文件:
[bookworm]
user = naeikindus
group = naeikindus
listen = /run/php/php7-fpm-pool_$pool.sock
listen.owner = www-data
listen.group = www-data
process.priority = 0
pm = dynamic
pm.max_children = 50
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.status_path = /fpm-status-$pool
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/pool_$pool.log
php_admin_flag[log_errors] = on
env[PATH] = /sbin:/bin:/usr/sbin:/usr/bin
文件权限的示例:
ls -lah /opt/git/Bookworm/web
total 64K
drwxr-xr-x 3 naeikindus naeikindus 4.0K Jan 12 22:50 .
drwxr-xr-x 10 naeikindus naeikindus 4.0K Feb 2 22:08 ..
-rw-r--r-- 1 naeikindus naeikindus 1.2K Jan 12 22:48 app_dev.php
-rw-r--r-- 1 naeikindus naeikindus 2.1K Jan 12 22:48 apple-touch-icon.png
-rw-r--r-- 1 naeikindus naeikindus 631 Jan 12 22:48 app.php
drwxr-xr-x 2 naeikindus naeikindus 4.0K Jan 12 22:50 bundles
-rw-r--r-- 1 naeikindus naeikindus 21K Jan 12 22:50 config.php
-rw-r--r-- 1 naeikindus naeikindus 6.4K Jan 12 22:48 favicon.ico
-rw-r--r-- 1 naeikindus naeikindus 3.3K Jan 12 22:48 .htaccess
-rw-r--r-- 1 naeikindus naeikindus 116 Jan 12 22:48 robots.txt
l /run/php/php7*
-rw-r--r-- 1 root root 5 Feb 3 01:01 /run/php/php7.0-fpm.pid
srw-rw---- 1 www-data www-data 0 Feb 3 01:01 /run/php/php7.0-fpm.sock
srw-rw---- 1 www-data www-data 0 Feb 3 01:01 /run/php/php7-fpm-pool_bookworm.sock
为了以防万一,我尝试使用的用户(naeikindus)也是 www-data 组的成员。
最后,php.ini(老实说,我能找到的所有文件)声明了正确的时区(你无法确定 :-/ ),以及我能找到的所有显示错误。我还尝试使用 cgi.fix_pathinfo=0 / 1,但没有成功。nginx 和 php-fpm 都已启动。
我也尝试了另一个“虚拟”网站(没有花哨的 PHP 框架,只有一个旧的
如果这里有人有解决方案或想法,那将对我有很大帮助。非常感谢!
- - 编辑 - -
nginx -V 的完整输出:
nginx 版本:nginx/1.10.3 使用 OpenSSL 1.0.1t 构建于 2016 年 5 月 3 日 TLS SNI 支持已启用 配置参数:--with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-file-aio --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_secure_link_module --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/usr/src/builddir/debian/modules/nginx-auth-pam --add-module=/usr/src/builddir/debian/modules/nginx-dav-ext-module --add-module=/usr/src/builddir/debian/modules/nginx-echo --add-module=/usr/src/builddir/debian/modules/nginx-upstream-fair --add-module=/usr/src/builddir/debian/modules/ngx_http_substitutions_filter_module --add-module=/usr/src/builddir/debian/modules/nginx-cache-purge --add-module=/usr/src/builddir/debian/modules/nginx-x-rid-header --with-ld-opt=-lossp-uuid
处理信息:
ps axuf:
www-data 3798 0.0 0.0 106428 3596 ? S 14:55 0:00 _ nginx: worker process
naeikin+ 3811 0.0 0.1 405828 22680 ? S 14:55 0:00 _ php-fpm: pool bookworm
从 CLI 直接调用 PHP 可按预期工作。似乎没有可用的 SELinux(仅安装了库)。
答案1
整个配置都正常工作,但 PHP 项目却无法正常工作。而且日志显然存储在项目目录中。
我不会删除这个问题(如果其他人认为应该删除,请删除),因为有人推荐了一些故障排除步骤,但我没有在其他地方看到它们(即 socat 评论);它也可能提醒人们检查最明显的(但有时被忽视的)错误原因:项目代码本身。