Как исправить ошибку при настройке CORS в NGINX?

У меня есть свой небольшой сервис. Вот часть его nginx конфигурации:

location /main {
    add_header 'Host' '$host:8080';
    proxy_pass http://backend_upstream
}

Как-то пришел пользователь с ошибкой ниже:

Access to XMLHttpRequest at 'https://server.ru/main' from origin 'https://first-origin.ru' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

curl 'https://server.ru/main' \ 
    -H 'sec-ch-ua: "...", "..."' \
    -H 'sec-ch-ua-platform: "Windows"' \
    -H 'origin: https://first-origin.ru' \
    -H 'Referer: https://referer.ru/' \
    -H 'sec-ch-ua-mobile: ?0' \
    -H 'sec-fetch-mode: cors' \
    -H 'sec-fetch-dest: empty' \
    -H 'sec-fetch-site: same-site' \
    -H 'User-Agent: ...' \
    -H 'accept-language: ...' \
    -H 'accept: application/json, text/plain, */*' \
    -H 'priority: u=1, i' \
    -H 'Content-Type: application/json' \
    --data-raw '{"streets":"some","count":2}'

Я поправил конфигурацию, добавив корс заголовки:

location /main {
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Headers' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Host' '$host:8080';
        add_header 'Access-Control-Max-Age' 600;
        add_header 'Content-Length' 0;
        return 204;
    }

    if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Headers' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Host' '$host:8080';
        add_header 'Access-Control-Max-Age' 600;
    }

    proxy_pass http://backend_upstream
}

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

Ошибка второго пользователя и его запрос:

Access to fetch at 'https://server.ru/main' from origin 'https://origin.ru' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

curl 'https://server.ru/main' \ 
    -H 'sec-ch-ua: "...", "..."' \
    -H 'sec-ch-ua-platform: "macOS"' \
    -H 'Referer: https://origin.ru/' \
    -H 'sec-ch-ua-mobile: ?0' \
    -H 'User-Agent: ...' \
    -H 'Content-Type: application/json' \
    --data-raw '{"streets":"all","count":1}' \
    --compressed

В то же время, если я делаю те же запросы, у меня всё отлично работает. Можете подсказать, что еще можно проверить?


Ответы (0 шт):