Nginx прокси Нодейс (Докку). Заголовки ответа CORS не проходят

Я использую Dokku для размещения моего приложения в DigitalOcean. Dokku запускает nginx 1.6 для прокси-приложений Docker, имитирующих среду, похожую на Heroku. Все приложения имеют одинаковые настройки по умолчанию, как показано ниже.

Мой сервер Node.js использует промежуточное программное обеспечение CORS, чтобы сообщить браузеру, чтобы www.myapp.com мог звонить на api.myapp.com:

Это отлично работает на моем локальном компьютере. При его развертывании в браузере возникает ошибка CORS:

XMLHttpRequest cannot load https://api.myapp.com/r_u_up. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.myapp.com' is therefore not allowed access. The response had HTTP status code 502.

Итак, WTF, окончен.

Я нашел этот конфиг nginx CORS, но он кажется очень грубым. Это старый код или лучший способ? Этот плагин использует этот конфиг.

Я бы предпочел более простую конфигурацию, которая просто передает заголовки ответа. Моему приложению не нужен nginx для их перехвата. Как я могу настроить это?

Приложение nginx.conf's:

upstream www { server 172.17.0.135:5000; }
server {
  listen      [::]:80;
  listen      80;
  server_name www.myapp.com ;
  return 301 https://www.myapp.com$request_uri;
}

server {
  listen      [::]:443 ssl spdy;
  listen      443 ssl spdy;
  server_name www.myapp.com;


  keepalive_timeout   70;
  add_header          Alternate-Protocol  443:npn-spdy/2;
  location    / {
    proxy_pass  http://www;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Request-Start $msec;
  }
  include /home/dokku/www/nginx.conf.d/*.conf;
}

1 ответ

Решение

Обновление: так получается, что CORS - это зомбированная, ходячая, безумная спецификация, и да, делать это с помощью конфигурации nginx - лучший способ.

http://enable-cors.org/

Причина, по которой nginx - лучший способ, заключается в том, что nginx - самый быстрый и ближайший к клиенту процесс.

Если nginx может выполнить запрос без касания вашего приложения (node.js, php, rails и т. Д.), Ваше приложение будет легче масштабироваться и работать быстрее.

Другие вопросы по тегам