Habilitar CORS en nginx

Habilitar CORS en nginx

Debido a que  el protocolo HTTP está en desuso y algunas empresas como Google califican negativo las páginas sin HTTPS  es deber de los desarrolladores actualizar las aplicaciones con un nivel de seguridad decente o alternativas para conectar aplicaciones que por su naturaleza no cuentan con ese protocolo; aunque muchos comentaran que no es buena práctica en algunos casos es necesario conectarse con aplicaciones que no utilizan dicho protocolo, para ello tenemos CORS.

 

Esta tecnología nos permite "controlar" los recursos cruzados. En nuestro caso tuvimos la necesidad de interconectar una APP móvil fabricada por nosotros en Ionic 5 y hacerla convivir con un Odoo 14 EE. Con la versión de ambas en producción, es difícil encontrar versiones de librerías (Usamos JSONRPC con Angular 12) que nos eviten tareas maratónicas para hacerlas funcionar 'transparentemente' sin modificar decenas de líneas de código y así evitar 'romper' las aplicaciones, afortunadamente encontramos en la red la solución para hacerlo desde nuestro proxy inverso (NGINX) el bloque de configuración para esto se muestra a continuación:

server {
  server_name 127.0.0.1:8069;

  location / {
    proxy_pass         http://127.0.0.1:8069/;
    proxy_redirect off;

    if ($request_method = 'OPTIONS') {
     add_header 'Access-Control-Allow-Origin' '*';
     add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
     add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
     add_header 'Access-Control-Max-Age' 1728000;
     add_header 'Content-Type' 'text/plain; charset=utf-8';
     add_header 'Content-Length' 0;
     return 204;
    }

    if ($request_method = 'POST') {
     add_header 'Access-Control-Allow-Origin' '*';
     add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
     add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
     add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
    }

    if ($request_method = 'GET') {
     add_header 'Access-Control-Allow-Origin' '*';
     add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
     add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
     add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
    }
  }
}

¡Advertencia! Utilice está técnica bajo su responsabilidad, algunos parámetros publicados pueden afectar el nivel de seguridad de sus aplicaciones.

 

Fuente: Codize