Appwrite 1.2.0添加自定义域名时返回500错误,遇CORS跨域问题
解决Appwrite 1.2.0自定义域名配置的500错误与CORS问题
一、排查500内部服务器错误
- 检查.env核心配置:
- 确认
_APP_DOMAIN是否也设为api.example.com,这是很多人漏改的关键变量,Appwrite域名配置需要_APP_DOMAIN配合_APP_DOMAIN_TARGET生效,光改后者没用。 - 检查.env里所有域名相关变量的格式,不要用中文引号,变量值前后别留空格。
- 确认
- 查看API服务日志:
- 执行
docker-compose logs -f api实时查看报错,500错误的具体原因(比如证书权限、数据库连接问题)基本都会在这里输出。 - 验证手动上传的SSL证书:确保证书文件放在
./certificates目录,权限设为644,所属用户组是www-data,可执行chmod 644 ./certificates/*和chown www-data:www-data ./certificates/*调整。
- 执行
- 重启全部容器:
- 修改.env后必须执行
docker-compose down && docker-compose up -d,只重启单个容器会导致配置不一致,这是常见的坑。
- 修改.env后必须执行
二、解决CORS报错问题
- 先搞定500错误,因为控制台无法访问是500导致的。如果临时没法用控制台配置CORS,直接修改数据库:
- 进入Mongo容器:
docker exec -it appwrite-mongo mongosh - 切换到Appwrite库:
use appwrite - 更新应用的CORS规则,把你的前端域名加进去:
db.applications.updateOne( { name: "你的应用名称" }, // 也可以用{ _id: "应用ID" }精准匹配 { $set: { cors: ["https://www.mydomain.0r"] } } )
- 进入Mongo容器:
- 检查全局CORS配置:
- 查看.env里的
_APP_CORS变量,如果有设置,要包含https://www.mydomain.0r,多个域名用逗号分隔,比如_APP_CORS=https://www.mydomain.0r,https://localhost。
- 查看.env里的
三、验证配置有效性
- 用curl测试API:
- 执行
curl -v https://api.example.com/v1/health,查看响应头里的Access-Control-Allow-Origin是否正确,同时确认没有500错误。
- 执行
- 确认DNS解析:
- 执行
nslookup api.example.com检查域名是否指向服务器IP,避免解析延迟导致配置不生效。
- 执行
内容的提问来源于stack exchange,提问作者user3344787
相关产品推荐
相关产品推荐

