У меня абсурдная проблема.
Я использую Laravel в одном из своих проектов. Я был в ларавеле v5.2.39 (и большинство пакетов Symfony были на v3.0.8 если это актуально), и все работало нормально. После обновления (с composer update
) в Laravel Версия 5.2.45, Я столкнулся с очень странной проблемой, заключающейся в том, что PHP смешивал страницы и обслуживал неправильные.
Перезапуск PHP-FPM устраняет проблему до тех пор, пока я не попаду на страницу своего сайта Laravel, после чего PHP начинает сойти с ума и случайным образом обслуживает пустые страницы, неправильные страницы с того же сайта или страницы с других сайтов.
Это происходит не только внутри моего проекта Laravel, но, похоже, это происходит со всеми веб-сайтами на том же Apache VirtualHost. Например, я иногда получаю обслуживаемые страницы с оскорбительного веб-сайта Laravel при посещении другой (несвязанной) страницы PHP на том же VirtualHost, но также и других (несвязанных) страниц PHP. Но я получаю только обслуживаемые страницы, которые обслуживались ранее, а не новые (непосещенные) страницы.
Полагаю, это странная проблема, связанная с кешированием? Я попытался внести этот сайт Laravel в черный список из PHP OPCache, но это не решило проблему.
Я точно знаю, что это как-то связано с более новой версией Laravel (или новой версией одной из зависимостей Laravel), потому что проблема исчезнет, если я переустановлю старую версию, и проблема снова появится после composer update
.
Информация о сервере:
ОС: Debian Stretch
Веб-сервер: Apache / 2.4.23
PHP-FPM: 7.0.10-1
Что интересно, я знаю друга, у которого однажды была точно такая же проблема. Я думаю, он закончил тем, что использовал mod-php вместо PHP-FPM.
РЕДАКТИРОВАТЬ:
Итак, после того, как все еще столкнулись с этой проблемой после выпуска composer update
в моем проекте я решил продолжить изучение этого вопроса, обновляя каждый пакет один за другим. Таким образом, мне удалось сузить проблему до обновления symfony/http-foundation
из версии v3.0.8
к v3.0.9
.
Таким образом, проблемы вызывает не обновление Laravel, а обновление одной из его зависимостей.
Но я не знаю, что делать дальше.
Оказалось, я сделал есть идея, как действовать.
Чтение журнала изменений Symfony для 3.0.9, фиксации относительно fastcgi_finish_request()
бросилось в глаза. Я читаю на документы PHP что эта функция может иметь некоторые подводные камни при использовании с PHP-FPM. Интересный. Может ли это быть связано?
Чтобы выяснить, действительно ли мои процессы PHP-FPM достигли pm.max_children
, Я включил страницу статуса PHP-FPM. Даже без сайта Laravel я заметил, что некоторые темы застряли в законченный штат. Это не правильно...
Оказалось, это было вызвано конфигурацией Apache, которую я использовал для подключения Apache к PHP-FPM:
<Proxy "unix:/run/php/php7.0-fpm.sock|fcgi://php-fpm">
# we must declare a parameter in here or it'll not register the proxy ahead of time
ProxySet disablereuse=on
</Proxy>
<FilesMatch \.php$>
SetHandler proxy:fcgi://php-fpm
</FilesMatch>
что более или менее необходимо для того, чтобы заставить его работать с путями UDS раньше. Кажется, это больше не требуется, и процессы PHP-FPM зависают. законченный состояние, потому что эта проблема была решена, когда я удалил ее и включил удобную конфигурацию в conf-available/php7.0-fpm.conf
вместо.
После обновления пакета Symfony до 3.0.9 проблема не вернулась.
Это, вероятно, самая странная проблема, связанная с сервером, которую я видел и решал, и я до сих пор не совсем понимаю, что происходит. Но это решено.