From c64d5971ee64a58101024df94bc56ccefd55c486 Mon Sep 17 00:00:00 2001 From: Untone Date: Tue, 17 Dec 2024 19:51:00 +0300 Subject: [PATCH] corsfix2 --- docs/features.md | 14 +++++++++++++- nginx.conf.sigil | 17 ++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/docs/features.md b/docs/features.md index dcb17067..240cf64c 100644 --- a/docs/features.md +++ b/docs/features.md @@ -21,4 +21,16 @@ - Автоматическая очистка устаревших вебхуков - Поддержка авторизации вебхуков через WEBHOOK_SECRET - Обработка ошибок при операциях с вебхуками -- Динамическое определение endpoint'а на основе окружения \ No newline at end of file +- Динамическое определение endpoint'а на основе окружения + +## CORS Configuration + +- Поддерживаются домены: + - localhost (включая поддомены и порты) + - *.dscrs.site (включая testing.dscrs.site) + - *.discours.io +- Поддерживаемые методы: GET, POST, OPTIONS +- Настроена поддержка credentials +- Настроена обработка preflight-запросов +- Настроено кэширование preflight-ответов на 20 дней (1728000 секунд) +- Добавлено логирование CORS-запросов для отладки в /var/log/nginx/cors-debug.log \ No newline at end of file diff --git a/nginx.conf.sigil b/nginx.conf.sigil index 1edaaadb..3f4e294c 100644 --- a/nginx.conf.sigil +++ b/nginx.conf.sigil @@ -6,7 +6,9 @@ {{ $cors_headers_get := "if ($request_method = 'GET') { add_header 'Access-Control-Allow-Origin' '$allow_origin' always; add_header 'Access-Control-Allow-Credentials' 'true' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always; add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always; }" }} map $http_origin $allow_origin { - ~^https?:\/\/((.*\.)?localhost(:\d+)?|(.*\.)?dscrs\.site|(.*\.)?discours\.io|(.*\.)?testing\.dscrs\.site)$ $http_origin; + "https://testing.dscrs.site" $http_origin; + "https://core.dscrs.site" $http_origin; + ~^https?:\/\/((.*\.)?localhost(:\d+)?|(.*\.)?dscrs\.site|(.*\.)?discours\.io)$ $http_origin; default ""; } @@ -22,6 +24,13 @@ limit_req_zone $binary_remote_addr zone=req_zone:10m rate=20r/s; {{ $upstream_port := index $port_map_list 2 }} server { + log_format cors '$remote_addr - $remote_user [$time_local] ' + '"$request" $status $body_bytes_sent ' + '"$http_referer" "$http_user_agent" ' + '"$http_origin" "$allow_origin"'; + + access_log /var/log/nginx/cors-debug.log cors; + {{ if eq $scheme "http" }} listen [::]:{{ $listen_port }}; listen {{ $listen_port }}; @@ -53,6 +62,12 @@ server { proxy_pass http://{{ $.APP }}-{{ $upstream_port }}; {{ $proxy_settings }} {{ $gzip_settings }} + + add_header 'Access-Control-Allow-Origin' $allow_origin always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always; + {{ $cors_headers_options }} {{ $cors_headers_post }} {{ $cors_headers_get }}