> 文章列表 > nginx cors 配置

nginx cors 配置

nginx cors 配置

什么是Nginx CORS?

基于Nginx的跨域资源共享(CORS)是一种机制,允许Web应用程序从其他域请求指定资源。当Web应用程序在跨域请求时,浏览器会发出CORS预检请求。这时服务器需要回复一组策略信息,指示浏览器是否将接受响应内容。

如何配置Nginx CORS?

配置CORS的第一步是在nginx.conf文件中启用HTTP头模块,通过添加以下行:

http {

#启用HTTP头模块

add_header 'Access-Control-Allow-Origin' '*' always;

}

这将添加一个名为“Access-Control-Allow-Origin”的HTTP响应头,系浏览器指定的域名。星号(*)表示对于所有域名都允许访问资源。可根据要求进行定制。

Nginx CORS支持的方法

Nginx支持以下CORS方法:

  • GET
  • POST
  • PUT
  • DELETE
  • OPTIONS

为了启用CORS,需要在Nginx配置文件中添加以下指令

add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;

启用CORS的其他指令

以下指令有助于进一步定制CORS:

  • access-control-allow-headers:允许访问资源的HTTP请求头列表。
  • access-control-expose-headers:允许访问资源的HTTP响应头列表。
  • access-control-max-age:指定浏览器对预检请求结果的缓存时间(以秒为单位)。
  • add-header:添加自定义HTTP响应头。

以下是一些示例指令:

add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always;

add_header 'Access-Control-Expose-Headers' 'Authorization' always;

add_header 'Access-Control-Max-Age' '86400' always;

常见CORS问题

常见的CORS问题包括:

  • 前端请求时没带上cookie。解决方案是发送带有“withCredentials:true”参数的AJAX请求。
  • 浏览器发出的CORS检测请求(预检)被阻止。解决方案是在Nginx配置文件中添加以下指令:
  • if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type'; add_header 'Access-Control-Max-Age' '86400'; add_header 'Content-Length' 0; return 204; }

  • 由于多个域共享了同一套代码,无法分别处理每个域的访问请求。此时需要在网站代码中添加特定的跨域访问处理逻辑。