当你在Nginx配置中设置Access-Control-Allow-Origin *
但仍然遇到跨域问题时,可能是由于配置不完整或存在其他限制。以下是完整的解决方案:
在Nginx配置文件中添加以下内容:
server {
listen 80;
server_name yourdomain.com;
location / {
# 基础跨域设置
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
# 处理OPTIONS预检请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
# 你的其他配置...
}
}
配置位置错误:
location
块中缺少always
关键字:
always
确保在所有响应中都添加头预检请求(OPTIONS)未处理:
缓存问题:
Access-Control-Max-Age
控制缓存时间凭证问题:
*
通配符add_header 'Access-Control-Allow-Origin' 'https://yourdomain.com'
map $http_origin $cors_origin {
default "";
"~^https://(domain1.com|domain2.com)$" $http_origin;
}
server {
# ...
add_header 'Access-Control-Allow-Origin' $cors_origin;
}
add_header 'Access-Control-Allow-Credentials' 'true';
# 注意: 此时不能使用 * 作为 Allow-Origin 的值
add_header 'Vary' 'Origin';
配置完成后,记得测试并重新加载Nginx配置:
sudo nginx -t # 测试配置
sudo nginx -s reload # 重新加载配置
如果问题仍然存在,请检查浏览器控制台的具体错误信息,它们通常会提供更详细的线索。