Ошибка FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
Пытаюсь поднять в Docker'e фулстек приложение на React + php Laravel. Путем гугла собрал конфиг docker-compose.yml
version: "3.0"
services:
back:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./back:/var/www
working_dir: /var/www
depends_on:
- mysql-server
front:
image: node:lts-alpine3.14
volumes:
- ./front:/app
working_dir: /app
tty: true
command: sh -c
"npm install &&
npm run build
"
mysql-server:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=Pavlik1234
ports:
- "3306:3306"
volumes:
- mysqldata:/var/lib/mysql
entrypoint: "bash -c 'echo -e \"CREATE DATABASE IF NOT EXISTS rosbuket;\" > /docker-entrypoint-initdb.d/rosbuket.sql &&
/entrypoint.sh mysqld'"
nginx:
image: nginx:stable-alpine
ports:
- "80:80"
depends_on:
- back
volumes:
- ./nginx:/etc/nginx/conf.d/
- ./front:/sites/rosbuket
- ./back:/var/www/
volumes:
mysqldata:
driver: local
И докер файл с fpm'ом:
FROM php:7.4-fpm
COPY /back/composer.lock /back/composer.json /var/www
WORKDIR /var/www
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl \
libzip-dev
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install pdo_mysql zip exif pcntl
RUN docker-php-ext-install gd
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
COPY ./back /var/www
COPY --chown=www:www . /var/www
USER www
EXPOSE 9000
CMD ["php-fpm"]
Но в логах nginx контейнера показывает ошибку
[error] 24#24: *9 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.22.0.1, server: rosbuket, request: "GET /api/admin/settings HTTP/1.1", upstream: "fastcgi://172.22.0.4:9000", host: "rosbuket", referrer: "http://rosbuket/"
Фронт стартует, компилится, но запросы не проходят, в консоли 404 и в ответе file not exist. Не могу уже два дня сообразить, что не так, где ошибка. Конфиг nginx:
server {
listen 80;
client_max_body_size 100M;
server_name rosbuket;
location / {
root /sites/rosbuket/build;
try_files $uri /index.html;
}
location /api {
root public;
fastcgi_pass back:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Ответы (1 шт):
Автор решения: Aleksey Vaganov
→ Ссылка
Пропишите корректный root.
У вас проект монтируется в папку
volumes:
- ./back:/var/www
А в конфигах nginx:
root public; и root /sites/rosbuket/build;
Если у вас единственная точка входа в приложение /var/www/public/index.php то замените свой location /api на этот:
location /api {
fastcgi_pass back:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/public/index.php;
fastcgi_param PATH_INFO $request_uri;
}