Nginx proxy Nodejs (Dokku). Los encabezados de respuesta CORS no pasan

Nginx proxy Nodejs (Dokku). Los encabezados de respuesta CORS no pasan

Estoy usando Dokku para alojar mi aplicación en DigitalOcean. DokkuEjecute nginx 1.6 para representar aplicaciones Docker que simulen un entorno similar a Heroku. Todas las aplicaciones comparten configuraciones predeterminadas similares a las que se muestran a continuación.

Mi servidor Node.js usamiddleware CORSpara indicarle al navegador que permita que www.myapp.com realice llamadas a api.myapp.com:

Esto funciona bien en mi computadora local. Cuando lo implemento, aparece un error CORS en el 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.

Entonces, WTF, cambio.

encontré estoconfiguración de nginx CORSpero parece muy tosco. ¿Es este código antiguo o la mejor manera? EsteEl complemento usa esa configuración.

Preferiría una configuración más simple que simplemente pase los encabezados de respuesta. Mi aplicación no necesita nginx para interceptarlos. ¿Cómo puedo configurar eso?

Aplicación 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;
}

Respuesta1

Actualización: resulta que CORS es una especificación zombificada, muerta y viviente, y sí, hacer esto con una configuración nginx es la mejor manera.

http://enable-cors.org/

La razón por la que nginx es la mejor manera es que nginx es el proceso más rápido y más cercano al cliente.

Si nginx puede encargarse de la solicitud sin tocar su aplicación (node.js, php, rails, etc.), entonces su aplicación se escalará más fácilmente y se ejecutará más rápido.

información relacionada