¿Cómo agrego Access-Control-Allow-Origin en NGINX?

¿Cómo configuro el encabezado Access-Control-Allow-Origin para poder usar fuentes web de mi subdominio en mi dominio principal?


Notas:

Encontrará ejemplos de este y otros encabezados para la mayoría de los servidores HTTP en los proyectos HTML5BP Server Configs https://github.com/h5bp/server-configs

4 Solutions collect form web for “¿Cómo agrego Access-Control-Allow-Origin en NGINX?”

Nginx tiene que ser compilado con http://wiki.nginx.org/NginxHttpHeadersModule (por defecto en Ubuntu y algunas otras distribuciones de Linux). Entonces puedes hacer esto

location ~* \.(eot|ttf|woff|woff2)$ { add_header Access-Control-Allow-Origin *; } 

Una respuesta más actualizada:

 # # Wide-open CORS config for nginx # location / { if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; # # Om nom nom cookies # add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; # # Custom headers and headers various browsers *should* be OK with but aren't # add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; # # Tell client that this pre-flight info is valid for 20 days # 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-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } if ($request_method = 'GET') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } } 

Fuente: https://michielkalkman.com/snippets/nginx-cors-open-configuration.html

También puede agregar Access-Control-Expose-Headers (en el mismo formato que Access-Control-Allow-Headers) para exponer sus encabezados personalizados y / o no simples a las solicitudes de ajax.

 Access-Control-Expose-Headers (optional) - The XMLHttpRequest 2 object has a getResponseHeader() method that returns the value of a particular response header. During a CORS request, the getResponseHeader() method can only access simple response headers. Simple response headers are defined as follows: Cache-Control Content-Language Content-Type Expires Last-Modified Pragma If you want clients to be able to access other headers, you have to use the Access-Control-Expose-Headers header. The value of this header is a comma- delimited list of response headers you want to expose to the client. 

http://www.html5rocks.com/en/tutorials/cors/

Configuraciones para otros servidores web http://enable-cors.org/server.html

Aquí está el artículo que escribí que evita algo de la duplicación para GET | POST. Debería ir con CORS en Nginx.

El control de acceso nginx permite el origen

Aquí está el fragmento de muestra de la publicación:

 server { listen 80; server_name api.test.com; location / { # Simple requests if ($request_method ~* "(GET|POST)") { add_header "Access-Control-Allow-Origin" *; } # Preflighted requests if ($request_method = OPTIONS ) { add_header "Access-Control-Allow-Origin" *; add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD"; add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept"; return 200; } .... # Handle request .... } } 

En primer lugar, permítanme decir que la respuesta @hellvinz está funcionando para mí:

 location ~* \.(eot|ttf|woff|woff2)$ { add_header Access-Control-Allow-Origin *; } 

Sin embargo, he decidido responder a esta pregunta con una respuesta por separado, ya que sólo logró conseguir esta solución de trabajo después de poner en unas diez horas más buscando una solución.

Parece que Nginx no define ningún tipo de fuente (correcta) MIME por defecto. Siguiendo este tuorial encontré que podría agregar lo siguiente:

 application/x-font-ttf ttc ttf; application/x-font-otf otf; application/font-woff woff; application/font-woff2 woff2; application/vnd.ms-fontobject eot; 

A mi etc/nginx/mime.types . Como se ha indicado, la solución anterior funcionó entonces.

  • Nginx Multiple si las instrucciones hacen que el uso de memory salte
  • parameters de proxy con nginx
  • Problemas de RAM con NGINX, PHP-FPM + APC y Barniz
  • Los processs de Nginx / php-fpm caen en Uninterruptible sleep
  • nginx 404 en lugar de 403 para el directory vacío
  • Vence la directiva devuelta en el encabezado de respuesta del server ngix
  • Nginx protege el directory con contraseña, excepto para ip específicos
  • Nginx proxy pase a localhost Gunicorn devuelve 50x error inesperadamente
  • Registros comodín con Nginx para manejar dominios personalizados
  • Nginx y php son ejecutados por diferentes usuarios. ¿Es una mala idea?
  • Conexión entre nginx y Barniz
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.