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

Я использую Dokku для хостинга моего приложения в DigitalOcean. Dokku выполняют nginx 1.6 для проксирования приложений Докера, моделирующих подобную 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;
}
2
задан 20 February 2015 в 18:54
1 ответ

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

http://enable-cors.org/

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

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

0
ответ дан 3 December 2019 в 14:49

Теги

Похожие вопросы