Назад | Перейти на главную страницу

Конфигурация Nginx cors для 2 поддоменов с отдельным ssl

У меня на сервере запущено два приложения.

  1. Приложение для реагирования на порты 4512 (локально по HTTP) и 5512 (по https). Доступно на https://merchant.abc.com:5512
  2. API узла js (экспресс) на портах 4511 (локально на http) и 5511 (на https) обслуживается на https://ce.abc.com:5511

Изначально я использовал SSL-сертификат с подстановочными знаками для обоих поддоменов, а nodejs заботился о CORS. Но тогда от нас потребовали использовать отдельные SSL-сертификаты для обоих доменов. Когда я использовал отдельные сертификаты SSL, Nginx начал отклонять запросы cors (я мог использовать API с помощью почтальона).

Затем я прочитал о параметрах Nginx cors в некоторых сообщениях здесь и придумал следующие настройки Nginx

/ и т.д. / nginx / сайты-доступные / по умолчанию

# Vendor API
server {
    listen 5511  ssl;
    ssl_certificate /ssl/ssl-bundle-api.crt;
    ssl_certificate_key /ssl/ssl-api.key;

    location /{
        include /etc/nginx/shared/allow-cors;

        proxy_pass http://localhost:4511;
        proxy_redirect off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Ssl on;
    }
}

# Retailer app
server {
    listen 5512  ssl;
    ssl_certificate /ssl/ssl-bundle-react.crt;
    ssl_certificate_key /ssl/ssl-react.key;

    location /{
        proxy_pass http://localhost:4512;
        proxy_redirect off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Ssl on;
    }
}

/ и т. д. / nginx / общий / разрешить корс

if ($request_method = "OPTIONS") {
    add_header Access-Control-Allow-Origin $http_origin always;
    add_header Access-Control-Allow-Credentials true always;
    add_header Access-Control-Allow-Methods 'DELETE,GET,OPTIONS,POST,PUT' always;
    add_header Access-Control-Allow-Headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With,X-Token-Auth,X-Mx-ReqToken,X-Requested-With' always;
    add_header 'Access-Control-Max-Age' 1728000 always;
    add_header 'Content-Type' 'text/plain charset=UTF-8' always;
    add_header 'Content-Length' 0 always;

    return 204;
}

add_header Access-Control-Allow-Origin $http_origin always;
add_header Access-Control-Allow-Credentials true always;
add_header Access-Control-Allow-Methods 'DELETE,GET,OPTIONS,POST,PUT' always;
add_header Access-Control-Allow-Headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With,X-Token-Auth,X-Mx-ReqToken,X-Requested-With' always;

Затем я удалил настройки cors из API nodejs. Похоже, это полностью устранило проблему с моим экземпляром aws ec2 ubuntu 18.04. Но когда я развертываю этот код на локальном сервере клиента (созданном с использованием образа моего экземпляра ec2), у него снова возникают проблемы. В Firefox кажется, что предполетная проверка получает ожидаемые 204, но тогда я не вижу отправленных запросов POST.

В Chrome я вижу успешную предполетную проверку с 204. Я также вижу фактический запрос POST в Chrome, но с (failed) net::ERR_FAILED положение дел.