Nginx proxy Nodejs (Dokku). Cabeçalhos de resposta CORS não passando

Nginx proxy Nodejs (Dokku). Cabeçalhos de resposta CORS não passando

Estou usando o Dokku para hospedar meu aplicativo na DigitalOcean. Dokkuexecute o nginx 1.6 para fazer proxy de aplicativos Docker simulando um ambiente semelhante ao Heroku. Todos os aplicativos compartilham configurações padrão semelhantes, como abaixo.

Meu servidor Node.js usaMiddleware CORSpara informar ao navegador para permitir que www.myapp.com faça chamadas para api.myapp.com:

Isso funciona bem no meu computador local. Ao implantá-lo, recebo um erro CORS no navegador:

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.

Então, WTF, acabou.

Eu achei istoConfiguração do CORS do nginxmas parece muito grosseiro. Este código é antigo ou é a melhor maneira? Esseplugin usa essa configuração.

Eu preferiria uma configuração mais simples que apenas passasse os cabeçalhos de resposta. Meu aplicativo não precisa do nginx para interceptá-los. Como posso configurar isso?

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

Responder1

Atualização: Acontece que CORS é uma especificação zombificada-walking-dead-louca e, sim, fazer isso com uma configuração nginx é a melhor maneira.

http://enable-cors.org/

A razão pela qual o nginx é a melhor maneira é que o nginx é o processo mais rápido e mais próximo do cliente.

Se o nginx puder cuidar da solicitação sem tocar em seu aplicativo (node.js, php, rails, etc), seu aplicativo será dimensionado com mais facilidade e executado mais rapidamente.

informação relacionada