CentOS7部署Strapi后台保存失败 提示403 Forbidden错误
故障场景
- 部署环境:CentOS 7服务器部署Strapi,全安装流程无异常提示
- 核心报错:管理后台执行任意保存操作均失败,浏览器控制台返回以下错误
Failed to load resource: the server responded with a status of 403 (Forbidden)
- 故障过程:部署初期可正常创建若干content-types,后续配置relational fields(关联字段)时首次触发该错误;初步怀疑与roles and permissions插件相关,先后尝试调整权限配置、更新个人账号资料,所有保存类操作均触发相同403报错,无法完成任何保存动作。
排查&修复方案
按优先级依次操作,每步完成后重启Strapi服务测试,问题解决即可停止后续操作:
第一步:修复项目目录权限
CentOS 7环境下最常见的触发原因是Strapi运行用户对项目核心目录无写入权限:配置关联字段、修改权限、更新账号信息等操作都需要写入项目配置文件、生成临时缓存,权限不足时会直接返回403。
执行以下命令时替换为实际项目路径、运行Strapi的系统用户(pm2部署可通过pm2 list查看运行用户)修复权限:chown -R 你的strapi运行用户:你的strapi运行用户 /你的strapi项目实际存放路径 find /你的strapi项目实际存放路径 -type f -exec chmod 644 {} \; find /你的strapi项目实际存放路径 -type d -exec chmod 755 {} \; # 给需要运行时写入的目录分配写权限 chmod -R 775 /你的strapi项目实际存放路径/tmp chmod -R 775 /你的strapi项目实际存放路径/public chmod -R 775 /你的strapi项目实际存放路径/src chmod -R 775 /你的strapi项目实际存放路径/config chmod -R 775 /你的strapi项目实际存放路径/extensions权限修复后如果是用pm2部署,执行
pm2 restart strapi服务名重启服务测试。第二步:修正安全中间件配置
如果配置了Nginx反向代理、用域名访问后台,Strapi默认安全中间件会拦截非信任来源的提交请求,返回403。打开项目下config/middlewares.js配置文件,替换为以下配置,注意将其中的访问地址替换为你实际打开后台用的IP/域名:module.exports = [ 'strapi::errors', { name: 'strapi::security', config: { contentSecurityPolicy: { useDefaults: true, directives: { 'connect-src': ["'self'", 'https:'], 'img-src': ["'self'", 'data:', 'blob:'], 'media-src': ["'self'", 'data:', 'blob:'], upgradeInsecureRequests: null, }, }, cors: { origin: ["http://你的服务器IP:1337", "https://你的后台访问域名"], credentials: true, }, }, }, 'strapi::cors', 'strapi::poweredBy', 'strapi::logger', 'strapi::query', 'strapi::body', 'strapi::session', 'strapi::favicon', 'strapi::public', ];保存后在项目根目录执行
npm run build或者yarn build重新构建管理后台,重启服务后测试。第三步:重置管理员权限配置
如果前两步操作后问题依旧,说明调整权限时误修改了管理员角色的核心操作权限,导致管理员自身无保存操作的权限。直接重置权限配置即可:- 提前备份项目对应的数据库
- 连接数据库,清空
admin_permissions、admin_roles、permissions表中自定义的权限记录 - 回到项目根目录重新执行build命令构建后台
- 重启服务,使用初始管理员账号登录即可恢复正常保存功能。
注意:所有涉及配置修改、后台构建的操作,必须重启Strapi服务后配置才会生效,不要直接刷新页面测试。
内容的提问来源于stack exchange,提问作者Talles Amadeu
相关产品推荐
相关产品推荐

