* Редактировать 1: ошибка, кажется, только с ПУБЛИКОВАТЬ
Запросы
У меня есть внешний веб-сайт на локальный хост
.
Есть страница регистрации локальный/регистр
Веб-сайт вызывает внутреннюю функцию для регистрации пользователя на локальный: 8080/API/регистр
Я использую Axios для POST имени пользователя и пароля.
Браузер отправляет два запроса: предварительный запрос OPTIONS, а затем запрос POST.
Пользователь успешно создан, однако браузер выдает ошибку для POST-запроса:
Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin».
И действительно, его нет в ответе на POST.
Предполагая, что мой внутренний файл cors настроен правильно, может ли проблема быть связана с комбинацией моей настройки Docker + Nginx, которая блокирует его или проксирует заголовки в неправильное место?
Это моя конфигурация nginx:
сервер {
слушать 8080;
индекс index.php index.html;
журнал_ошибок /var/log/nginx/error.log;
журнал_доступа /var/log/nginx/access.log;
корень /var/www/html/public;
место расположения / {
try_files $uri $uri/ /index.php?$query_string;
}
расположение ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass PHP: 9000;
fastcgi_index index.php;
включить fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
сервер {
слушать 80;
место расположения / {
прокси_пасс http://узел:3000;
}
}
и это мой докер-compose.yml
:
сети:
моя сеть:
водитель: мост
Сервисы:
нгинкс:
изображение: nginx: стабильный-альпийский
имя_контейнера: nginx
порты:
- "8080:8080"
- "80:80"
тома:
- ./php:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
зависит от:
- пхп
- узел
сети:
- моя сеть
php:
строить:
контекст: ./php
докерфайл: Докерфайл
имя_контейнера: php
пользователь: "1000:1000"
тома:
- ./php:/var/www/html
порты:
- "9000:9000"
сети:
- моя сеть
узел:
строить:
контекст: ./реагировать
докерфайл: Докерфайл
имя_контейнера: следующий
тома:
- ./реагировать:/var/www/html
порты:
- "3000:3000"
сети:
- моя сеть
** Редактировать 2:
Бэкэнд — это Laravel, и у него есть промежуточное ПО CORS, которое должно позаботиться об этом. И на самом деле, похоже, это работает, потому что ПОЛУЧАТЬ
и ПАРАМЕТРЫ
запрос проходит без ошибок, только ПУБЛИКОВАТЬ
запрос выдает эту ошибку.
Это файл конфигурации CORS (корс.php
) в Ларавеле:
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'разрешенные_методы' => ['*'],
'allowed_origins' => ['http://localhost'],
'allowed_origins_patterns' => ['*'],
'разрешенные_заголовки' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => правда