Nginx proxying Nodejs (Dokku). Cabeçalhos de resposta do CORS que não estão passando

2

Estou usando o Dokku para hospedar meu aplicativo na DigitalOcean. O Dokku roda o nginx 1.6 em aplicativos proxy Docker que simulam um ambiente semelhante ao Heroku. Todos os aplicativos compartilham configurações padrão semelhantes, como abaixo.

Meu servidor Node.js usa o middleware CORS para instruir o navegador a permitir que o www.myapp.com faça chamadas para api.myapp.com:

Isso funciona bem no meu computador local. Quando eu implantar, estou recebendo um erro de 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 encontrei esta configuração nginx CORS , mas ela parece muito crocante. Esse código antigo é o melhor caminho? Este plugin usa essa configuração.

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

App 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;
}
    
por Michael Cole 20.02.2015 / 17:54

1 resposta

0

Atualização: assim, o CORS é uma especificação de zumbis que andam mortos-vivos, e sim fazer isso com uma configuração nginx é a melhor maneira.

link

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 será executado com mais rapidez.

    
por 31.05.2015 / 18:35