NginX и Php-Fpm на докере

У меня есть официальный контейнер 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.

попробуйте отключить кеш на nginx conf.

Adiii 16.12.2018 17:59

Пробовал использовать директиву proxy_cache_bypass, и все та же ошибка. Также в заголовке запроса отключен кеш.

Jiri Fornous 16.12.2018 19:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
1 129
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы также можете указать PHP-FPM использовать только один процесс, установив для директивы pm значение static, а для pm.maxchildren значение 1 в файле конфигурации пула, что предотвратит одновременный доступ к файлам.

https://github.com/docker/for-win/issues/2005#issuecomment-391822753

Ответ принят как подходящий

Проблема была вызвана комбинацией привязок Docker к окнам. Я не пошел дальше, но, похоже, проблема решена на производственной машине с производственным контейнером, где нет привязок, а весь проект скопирован во время сборки.

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