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; }