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

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

Я использую Dokku для размещения своего приложения в DigitalOcean. Докку запустите 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:

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

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

http://enable-cors.org/

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

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