У меня на сервере работают два приложения.
- Приложение для реагирования на порте 4512 (локально по HTTP) и 5512 (по https). Доступен на https://merchant.abc.com: 5512
- 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.
На Chrome Я вижу успешную предполетную проверку с 204. Я также вижу фактический запрос POST в chrome, но со статусом (failed) net::ERR_FAILED
. Может кто-нибудь, пожалуйста, помогите решить эту проблему.