Подтвердить что ты не робот

CORS не работает, несмотря на набор заголовков

У меня есть приложение, в котором клиент делает множественный запрос с example.com на api.example.com через https с помощью Nginx, затем api загружает файл в Amazon S3.

Он работает на моей машине, но ломается, когда другие люди пробуют его в другой сети. Дайте мне эту ошибку:

[Error] Origin https://example.com is not allowed by Access-Control-Allow-Origin.
[Error] Failed to load resource: Origin https://example.com is not allowed by Access-Control-Allow-Origin. (graphql, line 0)
[Error] Fetch API cannot load https://api.example.com/graphql. Origin https://example.com is not allowed by Access-Control-Allow-Origin.

Я использую пакет kors npm в API следующим образом:

app.use(cors());

Все это проходит через обратный прокси Nginx на DigitalOcean. Вот это моя конфигурация Nginx:

Индивидуальные конфигурации сервера в /etc/nginx/conf.d/example.com.conf и /etc/nginx/conf.d/api.example.com.conf, почти идентичные, только адреса и имена разные:

 server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name example.com;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        include snippets/ssl-params.conf;

        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:3000/;
            proxy_ssl_session_reuse off;
            proxy_set_header Host $http_host;
            proxy_cache_bypass $http_upgrade;
            proxy_redirect off;
        }
    }

Он отлично работает, когда я использую его на localhost на своем компьютере, но как только я помещаю его в DigitalOcean, я не могу загрузить его. И это только ломается на этот многостраничный запрос, когда я загружаю файл, работают другие регулярные запросы GET и POST.

4b9b3361

Ответ 1

Проблема оказалась в том, что Nginx не принимал большие файлы. Размещение этого в блоке местоположений моей конфигурации сервера nginx разрешило мою проблему: client_max_body_size 10M;

Ответ 2

Проблема, вероятно, не с nginx, поскольку это только мобильная проблема. Попробуйте использовать вместо * для Access-Control-Allow-Origin вы также можете использовать свое происхождение.

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Authorization", "Access-Control-Allow-Headers", "Origin","X-Requested-With", "Content-Type", "Accept");
    next();
});

UPDATE

Попробуйте выполнить, если выше не работает, это все позволяет пока.

app.use(cors());