如何配置Nginx解决ThinkPHP跨域请求服务器失效问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计801个文字,预计阅读时间需要4分钟。
由于ThinkPHP自身的中间件或响应逻辑可能覆盖了Nginx设置的头部,Nginx的`add_header默认不会继承到子请求。如果PHP已经输出了响应头(例如通过`header()`或框架自动写入),Nginx将不会再次生效。
- 确认是否用了
fastcgi_pass:Nginx 的add_header对 FastCGI 后端默认不传递已设置的响应头,需显式开启fastcgi_pass_header或改用always参数 - 检查 ThinkPHP 是否启用了 CORS 中间件:如
think-middleware-cors,它会直接调用header(),优先级高于 Nginx - 用浏览器 DevTools 的 Network → Response Headers 看最终返回的是哪一层写的
Access-Control-Allow-Origin
Nginx 配置 add_header 必须带 always 才有效
ThinkPHP 的错误页、重定向、404 响应等非 200 状态码下,Nginx 默认不发送 add_header 设置的字段。不加 always,跨域头在接口报错时就消失,前端拿不到,直接卡死。
本文共计801个文字,预计阅读时间需要4分钟。
由于ThinkPHP自身的中间件或响应逻辑可能覆盖了Nginx设置的头部,Nginx的`add_header默认不会继承到子请求。如果PHP已经输出了响应头(例如通过`header()`或框架自动写入),Nginx将不会再次生效。
- 确认是否用了
fastcgi_pass:Nginx 的add_header对 FastCGI 后端默认不传递已设置的响应头,需显式开启fastcgi_pass_header或改用always参数 - 检查 ThinkPHP 是否启用了 CORS 中间件:如
think-middleware-cors,它会直接调用header(),优先级高于 Nginx - 用浏览器 DevTools 的 Network → Response Headers 看最终返回的是哪一层写的
Access-Control-Allow-Origin
Nginx 配置 add_header 必须带 always 才有效
ThinkPHP 的错误页、重定向、404 响应等非 200 状态码下,Nginx 默认不发送 add_header 设置的字段。不加 always,跨域头在接口报错时就消失,前端拿不到,直接卡死。

