Есть три контейнера:
- nginx,
- beckend: php-fpm+laravel
- vue.js+nginx
хочу чтобы все запросы на /api/* шли на beckend в laravel, а остальнве на frontend
frontend работает, страницы открываются,
а вот beckend на все запросы выдает 404
где я ошибся?
docker-compose.yml
services:
backend:
build:
context: ./backend
dockerfile: Dockerfile
args:
HTTP_PROXY: http://172.17.0.1:8118
HTTPS_PROXY: http://172.17.0.1:8118
NO_PROXY: localhost,127.0.0.1,::1,host.docker.internal,172.17.0.1,db,redis,backend,mailhog,frontend,web,adminer
http_proxy: http://172.17.0.1:8118
https_proxy: http://172.17.0.1:8118
no_proxy: localhost,127.0.0.1,::1,host.docker.internal,172.17.0.1,db,redis,backend,mailhog,frontend,web,adminer
extra_hosts:
- "host.docker.internal:host-gateway"
container_name: jdasia-backend
env_file:
- ./docker/.env.docker
volumes:
- ./backend:/var/www/html
depends_on:
- db
- redis
environment:
XDEBUG_MODE: ${XDEBUG_MODE:-develop,debug}
XDEBUG_CLIENT_HOST: ${XDEBUG_CLIENT_HOST:-host.docker.internal}
XDEBUG_CLIENT_PORT: ${XDEBUG_CLIENT_PORT:-9003}
http_proxy: http://172.17.0.1:8118
https_proxy: http://172.17.0.1:8118
no_proxy: localhost,127.0.0.1,::1,host.docker.internal,172.17.0.1,db,redis,backend,mailhog,frontend,web,adminer
HTTP_PROXY: http://172.17.0.1:8118
HTTPS_PROXY: http://172.17.0.1:8118
NO_PROXY: localhost,127.0.0.1,::1,host.docker.internal,172.17.0.1,db,redis,backend,mailhog,frontend,web,adminer
extra_hosts:
- "host.docker.internal:host-gateway"
nginx:
image: nginx:stable-alpine
container_name: jdasia-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./infra/nginx/certs:/etc/nginx/certs:ro
depends_on:
- backend
- frontend
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
HTTP_PROXY: http://172.17.0.1:8118
HTTPS_PROXY: http://172.17.0.1:8118
NO_PROXY: localhost,127.0.0.1,::1,host.docker.internal,172.17.0.1,db,redis,backend,mailhog,frontend,web,adminer
http_proxy: http://172.17.0.1:8118
https_proxy: http://172.17.0.1:8118
no_proxy: localhost,127.0.0.1,::1,host.docker.internal,172.17.0.1,db,redis,backend,mailhog,frontend,web,adminer
extra_hosts:
- "host.docker.internal:host-gateway"
container_name: jdasia-frontend
volumes:
- ./frontend:/app
- /app/node_modules
- ./infra/nginx/certs:/etc/nginx/certs:ro
environment:
- NODE_ENV=development
- HTTP_PROXY=http://172.17.0.1:8118
- HTTPS_PROXY=http://172.17.0.1:8118
- NO_PROXY=localhost,127.0.0.1,::1,host.docker.internal,172.17.0.1,db,redis,backend,mailhog,frontend,web,adminer
- http_proxy=http://172.17.0.1:8118
- https_proxy=http://172.17.0.1:8118
- no_proxy=localhost,127.0.0.1,::1,host.docker.internal,172.17.0.1,db,redis,backend,mailhog,frontend,web,adminer
depends_on:
- backend
volumes:
db_data:
./backend/Dockerfile
FROM php:8.2-fpm-trixie
# Proxy support
ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY
# Only set proxy if explicitly provided
ENV http_proxy=${HTTP_PROXY:-} \
https_proxy=${HTTPS_PROXY:-} \
no_proxy=${NO_PROXY:-} \
ALL_PROXY=${HTTP_PROXY:-}
# tcpdump port 9000 -A | strings
# Install system deps (Debian/apt)
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
git curl unzip zip \
tcpdump mc htop \
libpq-dev libicu-dev libzip-dev libonig-dev \
pkg-config autoconf make g++ \
&& docker-php-ext-configure intl \
&& docker-php-ext-install pdo pdo_pgsql mbstring intl zip opcache \
&& if [ -n "$HTTP_PROXY" ]; then pecl config-set http_proxy "$HTTP_PROXY"; fi \
&& pecl channel-update pecl.php.net || true \
&& (pecl install -o -f redis xdebug \
|| (echo "PECL direct install failed, trying tarballs" \
&& curl -fsSL --connect-timeout 20 --retry 5 ${HTTPS_PROXY:+--proxy "$HTTPS_PROXY"} https://pecl.php.net/get/redis-6.0.2.tgz -o /tmp/redis.tgz \
&& curl -fsSL --connect-timeout 20 --retry 5 ${HTTPS_PROXY:+--proxy "$HTTPS_PROXY"} https://pecl.php.net/get/xdebug-3.3.2.tgz -o /tmp/xdebug.tgz \
&& pecl install /tmp/redis.tgz /tmp/xdebug.tgz)) \
&& docker-php-ext-enable redis xdebug \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Composer will respect HTTP(S)_PROXY environment; no explicit config needed
WORKDIR /var/www/html
# Copy composer files first
COPY composer.json composer.lock ./
# Install PHP dependencies without running scripts (artisan not copied yet)
RUN composer install --no-dev --optimize-autoloader --no-scripts
# Copy application files (excluding vendor and node_modules)
COPY . .
RUN rm -rf node_modules
# Opcache recommended settings
ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS=1 \
PHP_OPCACHE_MAX_ACCELERATED_FILES=20000 \
PHP_OPCACHE_MEMORY_CONSUMPTION=128 \
PHP_OPCACHE_MAX_WASTED_PERCENTAGE=10
# Xdebug configuration (copied into conf.d)
COPY 99-xdebug.ini /usr/local/etc/php/conf.d/99-xdebug.ini
CMD ["php-fpm"]
./infra/nginx/default.conf
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
# PHP-FPM handler
location ~ \.php$ {
#include fastcgi_params;
include /etc/nginx/fastcgi_params;
fastcgi_pass backend:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
}
# Frontend (Vue.js SPA) - все остальные запросы
location / {
proxy_pass http://frontend:80;
}
# Backend API
location /api/ {
try_files $uri $uri/ /index.php?$query_string;
}
client_max_body_size 20m;
}
# HTTPS server
server {
listen 443 ssl;
http2 on;
server_name localhost;
ssl_certificate /etc/nginx/certs/dev.crt;
ssl_certificate_key /etc/nginx/certs/dev.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
index index.php index.html;
# Frontend (Vue.js SPA) - все остальные запросы
location / {
proxy_pass http://frontend:80;
}
# Backend API - send directly to PHP without filesystem checks
location /api/ {
proxy_pass http://backend:9000;
}
client_max_body_size 20m;
}