У меня есть официальный контейнер Docker NginX (NginX: latest), подключенный к официальному контейнеру на основе Php-Fpm (php: 7.2-fpm) с использованием привязки для конфигурации и исходного кода (для целей тестирования). Они общаются через FastCGI. Я использую Docker Edge для Windows 2.0.0. (двигатель 18.09).
Приложение php обслуживает html-страницы, и на каждой странице есть несколько запросов XHR для получения данных JSON из того же приложения.
Все работает хорошо, за исключением того, что второй запрос XHR выдает ошибку. Сама страница загружается, затем в событии готовности документа обрабатываются два запроса XHR, но только один из них (чаще всего первый) завершается успешно, а второй вызывает ошибку 404.
Ответ содержит ошибку No input file specified., и консоль докера показывает эти ошибки:
Php-fpm:
WARNING: [pool www] child 8 said into stderr: "ERROR: Unable to open primary script: /var/www/html/web/app.php (No such file or directory)"
Nginx:
*235 FastCGI sent in stderr: "Unable to open primary script: /var/www/html/web/app.php (No such file or directory)" while reading response header from upstream, client: 192.168.16.2, server: my-server.com, request: "GET /cli/cli_har_rc.php?EVENT=GET&THREAD=2 HTTP/1.0", upstream: "fastcgi://192.168.16.3:9000", host: "my-server.com", referrer: "https://my-server.com/cli/cli_har.php"
Это странно, потому что файл существует, и когда я использую тот же запрос на отдельной вкладке браузера, он работает хорошо. Также иногда случается, что порядок запросов меняется браузером, и только первый из них имеет успех, независимо от того, какой из них. Похоже, что параллелизм запросов играет роль.
NginX site.conf:
server {
set $request_url $request_uri;
listen 80;
server_name my-server.com;
root /var/www/html/web;
location / {
try_files $uri /app.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass fpm_cw:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/app.php;
fastcgi_param SCRIPT_NAME /app.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param REQUEST_URI $request_url;
}
}
Когда я помещаю некоторое время для вызова запроса XHR (1-2 секунды), он работает, как ожидалось. Кажется, проблема с некоторыми задержками обработки в докере при обработке Windows. Я еще не проверял это на машине Linux.
Пробовал использовать директиву proxy_cache_bypass, и все та же ошибка. Также в заголовке запроса отключен кеш.






Вы также можете указать PHP-FPM использовать только один процесс, установив для директивы pm значение static, а для pm.maxchildren значение 1 в файле конфигурации пула, что предотвратит одновременный доступ к файлам.
https://github.com/docker/for-win/issues/2005#issuecomment-391822753
Проблема была вызвана комбинацией привязок Docker к окнам. Я не пошел дальше, но, похоже, проблема решена на производственной машине с производственным контейнером, где нет привязок, а весь проект скопирован во время сборки.
попробуйте отключить кеш на nginx conf.