我已经相当干净地安装(并更新)了 ubuntu 16.04 LTS,并且正在尝试设置 PHP-FPM 以按域进行 chroot。我并不想在服务器上为每个域打开 n 个端口(它们是本地的,但我无论如何都不想这样做)。
但正如我所尝试的,我无法让代理通过套接字执行正确的脚本。当我用 index.php 替换 ${%SCRIPT_NAME} 时,它会加载我的索引(包含 phpinfo();),但不会加载任何其他内容 - 目前它只响应“文件未找到。”和 404 状态。我也可以[Thu Feb 15 17:18:37.581204 2018] [proxy_fcgi:error] [pid 15974] [client 10.0.0.15:60620] AH01071: Got error 'Primary script unknown\n'
在 apache 日志中看到。我也不知道如何正确调试 php-fpm,因为它没有向其日志输出太多内容... :-(
但无论我做什么,我都无法让它与 index.php 或 URL 中的其他脚本(而不是配置中的脚本)一起工作。我尝试了几种所谓的解决方案,但似乎都没有用。
我在 php fpm 中有以下设置:
[domain.com]
user = 4003
group = 4001
listen = /var/run/php/domain.com.sock
chroot = /disks/sdb1/clients/clientname/domain.com
chdir = /
catch_workers_output = yes
access.log = /disks/sdb1/clients/client/logs/access.domain.com.log
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
php_admin_value[error_log] = /disks/sdb1/clients/client/logs/error.domain.com.log
和 Apache 配置:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin client
DocumentRoot /disks/sdb1/clients/client/domain.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
CustomLog /var/log/apache2/domain.com-access.log combined
ErrorLog /var/log/apache2/domain.com-error.log
<Directory /disks/sdb1/clients/client/domain.com>
Options FollowSymLinks
AllowOverride All
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
SetEnv HOME "/disks/sdb1/clients/client/domain.com"
SetEnv HTTP_HOME "/disks/sdb1/clients/client/domain.com"
<FilesMatch \\.php$>
SetHandler "proxy:unix:/run/php/domain.com.sock|fcgi://localhost/${%SCRIPT_NAME}"
</FilesMatch>
#Use PHP-FPM for PHP processing
#SetEnv PATH_INFO "%{SCRIPT_NAME}"
#ProxyPassMatch ^(.*)$ "unix://var/run/php/domain.com.sock|fcgi://localhost//$1" enablereuse=on
</VirtualHost>