¿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.

  • Proxy inverso nginx no sirve subdirectorys
  • Problemas con nginx autoindex
  • ¿Cómo reducir el número de sockets en TIME_WAIT?
  • ¿Por qué Nginx no devuelve un error 404 para las URL que comienzan con un signo de interrogación?
  • NGINX: Reescribir segmento de URL numérica con prefijo
  • ¿Cómo cambiar el directory de subida temporal nginx / passenger?
  • Nginx 301 networkingirecciona las requestes incorrectas
  • nginx ignora el encabezado de location raíz (location /)
  • Proxy inverso para services mixtos tcp, udp y http
  • Configurar nginx proxy_pass para que siga correctamente según el protocolo utilizado
  • Reescribir un subdirectory a raíz en nginx
  • Cómo limpiar el buffer SSL de NginX a mediados de la request de Server Push
  • ¿Cómo puedo separar los loggings de acceso de las requestes de dos dominios diferentes del mismo server?
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.