Nginx конфигурация cors для 2 субдоменов с отдельным ssl - PullRequest
0 голосов
/ 28 мая 2020

У меня на сервере работают два приложения.

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

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

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

/ etc / nginx / sites-available / default

# 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;
    }
}

/ etc / nginx / shared / allow-cors

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;

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

На Chrome Я вижу успешную предполетную проверку с 204. Я также вижу фактический запрос POST в chrome, но со статусом (failed) net::ERR_FAILED. enter image description here enter image description here Может кто-нибудь, пожалуйста, помогите решить эту проблему.

...