You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 12 使用@vite时81端口被CORS策略拦截问题求助

解决Nginx+Apache架构下的CORS静态资源加载报错

问题根源

页面通过http://test.loc:81(Nginx服务)访问,但构建后的静态资源请求目标是http://test.loc/build/assets/...(Apache默认80端口服务),两者端口不同属于不同源,浏览器CORS策略拦截了跨域请求,且Apache未返回允许跨域的响应头。直接使用Apache时页面与资源同域,因此无报错。

可行修复方案

方案1:Nginx代理静态资源请求(推荐)

修改Nginx配置,将/build/assets/开头的请求代理到Apache,让页面和资源的访问域名端口完全一致,从根源避免跨域。
在Nginx对应server块中添加:

location /build/assets/ {
    proxy_pass http://test.loc; # 替换为你的Apache实际访问地址,如http://127.0.0.1:80
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

修改完成后重启Nginx,此时资源请求会通过Nginx转发到Apache,浏览器判定为同域请求,不再触发CORS拦截。

方案2:Apache配置CORS响应头

若不想调整Nginx代理逻辑,可在Apache中配置允许test.loc:81跨域访问的响应头:

  • 虚拟主机配置:在对应<VirtualHost>块中添加
Header set Access-Control-Allow-Origin "http://test.loc:81"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"
  • .htaccess配置:确保Apache开启mod_headers模块,在项目根目录的.htaccess中添加上述代码。
    修改后重启Apache,静态资源响应会携带允许跨域的头,浏览器将允许加载资源。

方案3:调整前端构建的资源路径

修改前端项目的构建配置,将资源公共路径设置为Nginx的访问地址:

  • Vite项目(vite.config.js):
export default {
  base: 'http://test.loc:81/build/assets/'
}
  • Vue CLI项目(vue.config.js):
module.exports = {
  publicPath: 'http://test.loc:81/build/assets/'
}

重新执行npm run build后,资源会从http://test.loc:81加载,与页面同域,解决CORS问题。

内容的提问来源于stack exchange,提问作者Дмитрий

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:15:04