Laravel (Nginx) в Docker, запросы на субдомены отдает 404?

Ссылка скопирована
1 ответ

Уже голову сломал не могу понять в чем причина.
Есть основной домен api.domain.test, тот что указывется в APP_URL отрабатывает без ошибок..
Другие субдомены cabinet.domain.test, admin.domain.test отдают: 404. Причем 404 отдает сам nginx а не Laravel

docker logs backend.fpm:

172.20.0.6 -  17/Dec/2023:11:26:38 +0000 "GET /index.php" 200 // api.domain.test 172.20.0.6 -  17/Dec/2023:11:26:41 +0000 "GET /index.php" 404 // cabinet.domain.test 172.20.0.6 -  17/Dec/2023:11:26:42 +0000 "GET /index.php" 404 // admin.domain.test

172.20.0.6 - 17/Dec/2023:11:26:38 +0000 "GET /index.php" 200 // api.domain.test 172.20.0.6 - 17/Dec/2023:11:26:41 +0000 "GET /index.php" 404 // cabinet.domain.test 172.20.0.6 - 17/Dec/2023:11:26:42 +0000 "GET /index.php" 404 // admin.domain.test

docker logs backend.web:

172.18.0.2 - - [17/Dec/2023:11:26:38 +0000] "GET / HTTP/1.1" 200 44 "-"  // api.domain.test 172.18.0.2 - - [17/Dec/2023:11:26:42 +0000] "GET / HTTP/1.1" 404 555 "-"  // cabinet.domain.test 172.18.0.2 - - [17/Dec/2023:11:26:44 +0000] "GET / HTTP/1.1" 404 555 "-"  // admin.domain.test

172.18.0.2 - - [17/Dec/2023:11:26:38 +0000] "GET / HTTP/1.1" 200 44 "-" // api.domain.test 172.18.0.2 - - [17/Dec/2023:11:26:42 +0000] "GET / HTTP/1.1" 404 555 "-" // cabinet.domain.test 172.18.0.2 - - [17/Dec/2023:11:26:44 +0000] "GET / HTTP/1.1" 404 555 "-" // admin.domain.test

docker exec -it backend.fpm php artisan route:list:

GET|HEAD  cabinet.domain.test/ ...................................................cabinet.index GET|HEAD  admin.domain.test/..................................................... platform.index

GET|HEAD cabinet.domain.test/ ...................................................cabinet.index GET|HEAD admin.domain.test/..................................................... platform.index

docker-compose.yml:

version: '3.7' services:   nginx-proxy:     container_name: proxy     image: nginxproxy/nginx-proxy     ports:       - "80:80"     volumes:       - /var/run/docker.sock:/tmp/docker.sock:ro     networks:       - reverse-proxy        frontend:     container_name: frontend     image: nuxt3     expose:       - 80     environment:       API_URL: http://api.domain.test       API_REFERRER: http://new.domain.test       VIRTUAL_HOST: new.domain.test       VIRTUAL_PORT: 80       NITRO_PORT: 80       PORT: 80     networks:       - backend       - reverse-proxy    backend.web:     build:       context: ${BACKEND_SRC_DIR}       target: fpm_server     container_name: backend.web     expose:       - 80     restart: always     environment:       FPM_HOST: "backend.fpm:9000"       VIRTUAL_HOST: api.domain.test,cabinet.domain.test,admin.domain.test       VIRTUAL_PORT: 80       PORT: 80     networks:       - backend       - reverse-proxy     depends_on:       - "backend.fpm"    backend.fpm:       context: ${BACKEND_SRC_DIR}       target: fpm_server     container_name: backend.fpm     environment:       APP_NAME: "Laravel"       APP_DEBUG: "true"       APP_URL: http://api.domain.test       APP_DOMAIN: api.domain.test       CABINET_DOMAIN: cabinet.domain.test       DASHBOARD_DOMAIN: admin.domain.test     restart: always     networks:       - backend

version: '3.7' services: nginx-proxy: container_name: proxy image: nginxproxy/nginx-proxy ports: - "80:80" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro networks: - reverse-proxy frontend: container_name: frontend image: nuxt3 expose: - 80 environment: API_URL: http://api.domain.test API_REFERRER: http://new.domain.test VIRTUAL_HOST: new.domain.test VIRTUAL_PORT: 80 NITRO_PORT: 80 PORT: 80 networks: - backend - reverse-proxy backend.web: build: context: ${BACKEND_SRC_DIR} target: fpm_server container_name: backend.web expose: - 80 restart: always environment: FPM_HOST: "backend.fpm:9000" VIRTUAL_HOST: api.domain.test,cabinet.domain.test,admin.domain.test VIRTUAL_PORT: 80 PORT: 80 networks: - backend - reverse-proxy depends_on: - "backend.fpm" backend.fpm: context: ${BACKEND_SRC_DIR} target: fpm_server container_name: backend.fpm environment: APP_NAME: "Laravel" APP_DEBUG: "true" APP_URL: http://api.domain.test APP_DOMAIN: api.domain.test CABINET_DOMAIN: cabinet.domain.test DASHBOARD_DOMAIN: admin.domain.test restart: always networks: - backend

nginx.conf.template:

server {       listen 80 default_server;       listen [::]:80 default_server;        root /opt/apps/app-source/public;        add_header X-Frame-Options "SAMEORIGIN";       add_header X-XSS-Protection "1; mode=block";       add_header X-Content-Type-Options "nosniff";        index index.php;        server_name _;        location / {         try_files $uri $uri/ /index.php?$query_string;       }        location = /favicon.ico { access_log off; log_not_found off; }       location = /robots.txt  { access_log off; log_not_found off; }        error_page 404 /index.php;        location ~ .php$ {         include fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass ${FPM_HOST};         fastcgi_param PATH_INFO $fastcgi_path_info;         fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;       }        location ~ /.ht {         deny all;       }        location ~ /.(?!well-known).* {         deny all;       } }

server { listen 80 default_server; listen [::]:80 default_server; root /opt/apps/app-source/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php; server_name _; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { include fastcgi_params; fastcgi_intercept_errors on; fastcgi_pass ${FPM_HOST}; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; } location ~ /.ht { deny all; } location ~ /.(?!well-known).* { deny all; } }

Dockerfile:

FROM php:8.2.6-fpm-alpine as fpm_server  ARG PHP_EXTS ARG PHP_PECL_EXTS ARG PHP_EXT_DEPS ARG PHP_EXT_CONF  WORKDIR /opt/apps/app-source  RUN apk add --no-cache ${PHP_EXT_DEPS}  RUN apk add --virtual build-dependencies --no-cache ${PHPIZE_DEPS} ${PHP_EXT_DEPS} openssl ca-certificates libxml2-dev oniguruma-dev      && docker-php-ext-configure ${PHP_EXT_CONF}      && docker-php-ext-install -j$(nproc) ${PHP_EXTS}      && pecl install ${PHP_PECL_EXTS}      && docker-php-ext-enable ${PHP_PECL_EXTS} ${PHP_EXT_ENABLE}      && apk del build-dependencies  USER  www-data  COPY --from=composer_base --chown=www-data /opt/apps/app-source /opt/apps/app-source COPY --from=frontend --chown=www-data /opt/apps/app-source/public /opt/apps/app-source/public  RUN php artisan event:cache &&      php artisan route:cache &&      php artisan view:cache  FROM nginx:1.20-alpine as web_server  WORKDIR /opt/apps/app-source  COPY docker/nginx.conf.template /etc/nginx/templates/default.conf.template  COPY --from=frontend /opt/apps/app-source/public /opt/apps/app-source/public

FROM php:8.2.6-fpm-alpine as fpm_server ARG PHP_EXTS ARG PHP_PECL_EXTS ARG PHP_EXT_DEPS ARG PHP_EXT_CONF WORKDIR /opt/apps/app-source RUN apk add --no-cache ${PHP_EXT_DEPS} RUN apk add --virtual build-dependencies --no-cache ${PHPIZE_DEPS} ${PHP_EXT_DEPS} openssl ca-certificates libxml2-dev oniguruma-dev && docker-php-ext-configure ${PHP_EXT_CONF} && docker-php-ext-install -j$(nproc) ${PHP_EXTS} && pecl install ${PHP_PECL_EXTS} && docker-php-ext-enable ${PHP_PECL_EXTS} ${PHP_EXT_ENABLE} && apk del build-dependencies USER www-data COPY --from=composer_base --chown=www-data /opt/apps/app-source /opt/apps/app-source COPY --from=frontend --chown=www-data /opt/apps/app-source/public /opt/apps/app-source/public RUN php artisan event:cache && php artisan route:cache && php artisan view:cache FROM nginx:1.20-alpine as web_server WORKDIR /opt/apps/app-source COPY docker/nginx.conf.template /etc/nginx/templates/default.conf.template COPY --from=frontend /opt/apps/app-source/public /opt/apps/app-source/public

Дополнительно:

В общем была ошибка: Untrusted Host "cabinet.site.test" из symfony/http-foundation/Request:1172.

Видимо на нее нарваться можно только в том случае, если основное приложение находится на субдомене (APP_ENV=api.site.test), и есть роуты с других субдоменов (в моем случае cabinet.site.test), указание этих субдоменов в middleware TrustHosts, решило проблему

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

Для того чтобы настроить Laravel (Nginx) в Docker так, чтобы запросы на субдомены не возвращали ошибку 404, следует выполнить следующие шаги:

1. Проверьте конфигурацию Nginx. Убедитесь, что в конфигурационном файле Nginx есть правильные настройки для обработки запросов на субдомены. Вам может потребоваться добавить директивы server_name для каждого субдомена.

2. Проверьте файл hosts на вашем компьютере. Убедитесь, что у вас правильно настроены записи для каждого субдомена, которые вы используете. Это позволит вашему компьютеру правильно разрешать имена доменов.

3. Проверьте настройки DNS. Убедитесь, что у вас правильно настроены записи DNS для каждого субдомена. Это позволит вашему серверу правильно обрабатывать запросы на эти субдомены.

4. Перезапустите контейнеры Docker. Иногда проблемы могут возникать из-за неправильной конфигурации или некорректной загрузки контейнеров. Попробуйте перезапустить все контейнеры и проверьте, решается ли проблема.

Приведенные выше шаги помогут вам настроить Laravel (Nginx) в Docker так, чтобы запросы на субдомены больше не возвращали ошибку 404. Не забудьте сохранить и применить изменения после внесения правок в конфигурацию.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно