*Edición 1: El error parece ser solo con POST
solicitudes
Tengo un sitio web frontend en localhost
. Hay una página de registro enlocalhost/register
El sitio web llama a una función de backend para registrar a un usuario enlocalhost:8080/api/register
Utilizo Axios para PUBLICAR el nombre de usuario y la contraseña. El navegador envía dos solicitudes: solicitud previa al vuelo de OPCIONES y luego la solicitud POST.
El usuario se creó correctamente, sin embargo, el navegador arroja un error para la solicitud POST:
Reason: CORS header ‘Access-Control-Allow-Origin’ missing
Y de hecho falta en la respuesta al POST. Suponiendo que mi archivo backend cors esté configurado correctamente, ¿podría el problema deberse a la combinación de mi configuración de Docker + Nginx que lo bloquea o a enviar los encabezados a un lugar incorrecto?
Esta es mi configuración de nginx:
server {
listen 8080;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
server {
listen 80;
location / {
proxy_pass http://node:3000;
}
}
y esta es mi docker-compose.yml
:
networks:
mynetwork:
driver: bridge
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8080:8080"
- "80:80"
volumes:
- ./php:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- node
networks:
- mynetwork
php:
build:
context: ./php
dockerfile: Dockerfile
container_name: php
user: "1000:1000"
volumes:
- ./php:/var/www/html
ports:
- "9000:9000"
networks:
- mynetwork
node:
build:
context: ./react
dockerfile: Dockerfile
container_name: next
volumes:
- ./react:/var/www/html
ports:
- "3000:3000"
networks:
- mynetwork
**Edición 2:
El backend es Laravel y tiene un middleware CORS que se supone que se encarga de ello. Y, de hecho, parece estar funcionando porque GET
una OPTIONS
solicitud pasa sin error, solo la POST
solicitud arroja este error.
Este es el archivo de configuración CORS ( cors.php
) en Laravel:
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['http://localhost'],
'allowed_origins_patterns' => ['*'],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true