作为我工作的基于Web的项目的一部分,我们生成新的“站点”,通过将不同的参数传递给$_GET
来访问它们。所有网站都位于/usr/local/sites
。我们使用的用户(hwphp
,www-data
仍然是默认的apache用户)没有所有站点(用户或组),但是用户在组中,因此可以读取所有文件目录。
我有一个生成网站的python脚本,在运行它之后,有一半的时间我尝试访问它http://localhost/index.php?site=newsite
我得到File not found: /var/local/sites/newsite/config/config.ini
虽然运行PHP CLI但它可以找到文件和hwphp
用户可以很好地阅读它,就在我通过PHP-FPM / Apache时失败了。
这是我的游泳池配置:
; Start a new pool named 'www'.
; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here)
[submitty]
user = hwphp
group = hwphp
listen = /run/php/php7.0-fpm-submitty.sock
listen.owner = www-data
listen.group = www-data
;listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
和我的apache配置:
<VirtualHost 192.168.56.101:80>
AddDefaultCharset utf-8
ServerAdmin ADMIN@DOMAIN.HERE
ServerName 192.168.56.101
DocumentRoot /usr/local/submitty/site/public
DirectoryIndex index.html index.php index.htm index.cgi
SuexecUserGroup hwphp hwphp
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm-submitty.sock -pass-header Authorization
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php7-fcgi
</FilesMatch>
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
<Files .*>
Order allow,deny
Deny from all
</Files>
<Files *~>
Order allow,deny
Deny from all
</Files>
<Files #*>
Order allow,deny
Deny from all
</Files>
<Directory />
AllowOverride None
</Directory>
<Directory /usr/local/submitty/site/public>
Require all granted
Order allow,deny
Allow from all
</Directory>
LogLevel error
ErrorLog ${APACHE_LOG_DIR}/submitty.log
CustomLog ${APACHE_LOG_DIR}/submitty.log combined
</VirtualHost>
我一做:
service php7.0-fpm restart
它工作正常,找到了文件。不知道为什么这可能是没有意义的(为什么简单的重启是什么修复它)。
服务器是Ubuntu 16.04,使用PHP 7和Apache 2.4,所有东西都来自库存apt-get安装。
答案 0 :(得分:0)
问题最终是PHP正在对读取的文件进行一些缓存,这在尝试打开文件时导致了问题。重新启动php-fpm刷新了缓存,并使一切正常。