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 кэш очистился и все заработало.

Другие вопросы по тегам