PHP-FPM требует перезагрузки для доступа к сгенерированному файлу при посещении веб-страницы
В рамках веб-проекта, над которым я работаю, мы создаем новые "сайты", доступ к которым осуществляется путем передачи другого параметра в $_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 ответов
В итоге проблема заключалась в том, что PHP выполнял некоторое кэширование чтения файла, что вызывало проблемы при попытке открыть файлы. После перезапуска php-fpm кэш очистился и все заработало.