两个DDEV站点间CORS仍被拦截,请求协助排查问题
解决DDEV环境下跨域AJAX请求的CORS问题
先纠正配置方式:别直接修改
nginx-site.conf,DDEV里自定义Nginx规则的标准做法是用.ddev/nginx/custom.conf文件,不用删除#ddev-generated注释,重启服务也不会覆盖自定义配置。之前的配置不生效,大概率是因为你的请求路径(
/actions/login-share/test)被处理PHP的location块接管了,根location /里的add_header规则没被继承;而且默认add_header只在成功响应(200/301这类状态码)里添加,错误响应不会带上CORS头。给你一个能生效的配置,写入
.ddev/nginx/custom.conf即可:
# 处理OPTIONS预请求 if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' 'https://craft-b.ddev.site'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; add_header 'Access-Control-Max-Age' 3600; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; return 204; } # 为所有响应添加CORS头(包括错误响应) add_header 'Access-Control-Allow-Origin' 'https://craft-b.ddev.site' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always; add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
操作步骤:
- 把之前修改的
nginx-site.conf恢复原样(加回#ddev-generated注释) - 在
.ddev/nginx目录下创建custom.conf文件,粘贴上面的配置 - 运行
ddev restart重启服务 - 重新测试AJAX请求
- 把之前修改的
排查建议:如果还是报错,打开浏览器开发者工具查看请求的响应头,确认是否存在
Access-Control-Allow-Origin;或者用ddev logs -s nginx查看Nginx日志,检查配置是否有语法错误。
内容的提问来源于stack exchange,提问作者Cat Named Dog
相关产品推荐
相关产品推荐

