*Edit 1: eroarea pare să fie doar cu POST
cereri
Am un site web frontend gazdă locală
.
Există o pagină de înregistrare pe localhost/registru
Site-ul web apelează la o funcție de backend pentru a înregistra un utilizator localhost:8080/api/register
Folosesc Axios pentru a POST numele de utilizator și parola.
Browserul trimite două solicitări: cererea OPȚIUNI înainte de zbor și apoi cererea POST.
Utilizatorul este creat cu succes, totuși browserul afișează o eroare pentru solicitarea POST:
Motiv: antetul CORS âAccess-Control-Allow-Originâ lipsește
Și într-adevăr lipsește din răspunsul la POST.
Presupunând că fișierul meu backend cors este configurat corect, ar putea problema să fie din combinația dintre configurația mea Docker + Nginx care îl blochează sau proxy anteturile într-un loc greșit?
Aceasta este configurația mea nginx:
Server {
asculta 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;
Locație / {
try_files $uri $uri/ /index.php?$query_string;
}
locație ~ \.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 {
asculta 80;
Locație / {
proxy_pass http://node:3000;
}
}
iar acesta este al meu docker-compose.yml
:
retele:
rețeaua mea:
şofer: pod
Servicii:
nginx:
imagine: nginx:stable-alpine
container_name: nginx
porturi:
- „8080:8080”
- „80:80”
volume:
- ./php:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depinde de:
- php
- nod
retele:
- rețeaua mea
php:
construi:
context: ./php
dockerfile: Dockerfile
nume_container: php
utilizator: „1000:1000”
volume:
- ./php:/var/www/html
porturi:
- „9000:9000”
retele:
- rețeaua mea
nodul:
construi:
context: ./react
dockerfile: Dockerfile
container_name: următorul
volume:
- ./react:/var/www/html
porturi:
- „3000:3000”
retele:
- rețeaua mea
**Edit 2:
Backend-ul este Laravel și are un middleware CORS care ar trebui să aibă grijă de el. Și de fapt pare să funcționeze pentru că OBȚINE
și OPȚIUNI
cererea trece fără eroare, doar POST
cererea aruncă această eroare.
Acesta este fișierul de configurare CORS (cors.php
) în Laravel:
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['http://localhost'],
'allowed_origins_patterns' => ['*'],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => adevărat