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

使用Bref配置serverless.yml部署Laravel到AWS报500与跨域错误

问题根因说明

你遇到的页面黑屏、接口返回{"message":"Internal Server Error"}、控制台提示strict-origin-when-cross-origin三个现象里,核心故障是Lambda环境下Laravel运行异常触发500错误,CORS跨域提示是次生问题:API Gateway返回默认500响应时不会携带跨域头,才会被浏览器的跨域策略拦截,不需要先调整前端跨域配置,优先修复Lambda侧的运行错误即可。

现有serverless.yml配置的核心问题
  • 部署包排除规则错误:配置了!storage/**将整个Laravel storage目录排除在部署包外,Laravel启动必须依赖storage下的框架缓存、视图、日志目录,缺失该目录会直接导致启动失败抛500。
  • 缺少Serverless环境适配的环境变量:没有配置Lambda无持久化场景下必须的缓存、Session、日志驱动参数,Laravel默认的本地存储驱动在Lambda只读环境下无法正常写入。
  • httpApi事件未配置CORS规则:即使后端正常运行,跨域请求也会被浏览器拦截。
  • 未配置静态资源处理规则:默认配置下API Gateway会把所有请求(包括css、js等静态资源请求)都转给PHP处理,静态资源加载失败会直接导致页面黑屏。
修复方案

1. 修正部署包排除规则

删除原有package配置里的- '!storage/**'规则,替换为仅排除本地运行产生的临时文件,保留storage目录的基础结构:

package:
    patterns:
        - '!node_modules/**'
        - '!public/storage'
        - '!resources/assets/**'
        - '!storage/logs/**'
        - '!storage/framework/cache/**'
        - '!storage/framework/sessions/**'
        - '!storage/framework/views/**'
        - '!tests/**'

2. 补充环境变量与CORS配置

在provider段添加Lambda运行必要的环境变量,同时开启httpApi的CORS支持:

provider:
    name: aws
    region: eu-central-1
    stage: dev
    runtime: provided.al2
    environment:
        APP_BASE_PATH: '/var/task'
        CACHE_DRIVER: array
        SESSION_DRIVER: cookie
        LOG_CHANNEL: stderr
        APP_ENV: production
        # 调试阶段可临时设为true查看具体Laravel报错,正式部署改回false
        APP_DEBUG: false
    httpApi:
        cors:
            allowedOrigins:
                # 正式环境替换为实际前端域名,不要长期用*通配
                - '*'
            allowedMethods:
                - GET
                - POST
                - PUT
                - DELETE
                - PATCH
                - OPTIONS
            allowedHeaders:
                - '*'
            allowCredentials: false

3. 部署前执行Laravel优化命令

在本地项目根目录执行以下命令生成兼容Serverless环境的缓存文件,避免路径解析错误:

php artisan config:cache
php artisan route:cache
php artisan view:cache

可选优化

你当前使用的php-80层对应PHP 8.0版本已经停止维护,建议替换为${bref:layer.php-82-fpm}、${bref:layer.php-82}的PHP8.2版本层,获得更好的兼容性与安全性。

如果按以上步骤调整后仍然返回500,可以临时将APP_DEBUG设为true重新部署,再次请求接口即可看到具体的Laravel报错信息,常见剩余问题包括PHP扩展缺失、目录权限不足、.env配置参数错误。


内容的提问来源于stack exchange,提问作者jhon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:54:21