Я перемещаю свои API из поддомена в другой, не затрагивая уже запущенные приложения. У меня есть три сервера, настроенных на nginx, такие как:
Исходный API-сервер:
server {
listen 80;
server_name example.com;
root /var/www/example/;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
add_header 'Access-Control-Allow-Origin' '*';
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~*/api/([a-zA-Z0-9_]+) {
proxy_pass http://127.0.0.1:4343/api/$1;
proxy_read_timeout 60s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header 'Access-Control-Allow-Origin' '*';
proxy_set_header 'Access-Control-Allow-Credentials' true;
}
...
}
Прокси-сервер пройден:
server {
listen 4343;
server_name _;
root /var/www/exampleapi/;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
add_header 'Access-Control-Allow-Origin' '*';
location / {
try_files $uri $uri/ /index.php?$args;
}
...
}
Вызов AJAX работал отлично на старых API, однако на новых я получаю ошибку на FF:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/api/startup. (Reason: CORS header 'Access-Control-Allow-Origin' does not match '*, *').
И в Safari:
XMLHttpRequest cannot load https://example.com/api/startup. Origin https://myclient.com is not allowed by Access-Control-Allow-Origin.
Керлинг как на новых, так и на старых API-шоу:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Как я могу решить эту проблему?
решение1
Решением этой проблемы было не добавлять add_header для CORS для сервера Proxy Passed, так как это дублирует заголовок, а также не использовать set_header.
Прокси-сервер пройден:
server {
listen 4343;
server_name _;
root /var/www/exampleapi/;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
location / {
try_files $uri $uri/ /index.php?$args;
}
...
}