站点域名经CloudFront CDN时Strapi管理后台无法登录的问题排查
解决CloudFront代理后Strapi管理后台登录401问题
一、Strapi端配置调整
修正服务器配置文件(
config/server.js)- 确保
url设置为CloudFront分配的域名(如https://your-cdn-domain.com),而非服务器内网IP或原始域名 - 开启CORS并允许CDN域名,同时开启凭据传递:
module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), app: { keys: env.array('APP_KEYS'), }, url: env('PUBLIC_URL', 'https://your-cdn-domain.com'), cors: { enabled: true, origin: ['https://your-cdn-domain.com'], credentials: true, }, }); - 调整Session中间件的Cookie配置(
config/middlewares.js),适配HTTPS跨域场景:module.exports = [ // 保留其他默认中间件 { name: 'strapi::session', config: { cookie: { secure: true, domain: '.your-cdn-domain.com', sameSite: 'none', }, }, }, // 保留其他默认中间件 ];
- 确保
修正管理员JWT配置(
config/admin.js)
确保登录Cookie的安全属性开启:module.exports = ({ env }) => ({ auth: { secret: env('ADMIN_JWT_SECRET'), cookie: { secure: true, sameSite: 'none', }, }, // 保留其他管理员配置 });
二、CloudFront CDN配置调整
转发关键HTTP头部
在缓存策略中添加以下头部转发规则:Host:转发至源站,确保Nginx能识别正确域名X-Forwarded-For:转发客户端真实IPX-Forwarded-Proto:转发请求协议(HTTPS)X-Forwarded-Host:转发CDN域名
这些头部能让Strapi识别真实请求来源,正确生成和验证会话Cookie。
允许Cookie传递
在行为设置中,将Cookie转发规则设为转发所有Cookie(或至少strapi.sid、strapi.jwt这两个Strapi核心会话Cookie),否则登录状态无法同步到源站。禁用管理后台路径缓存
对/admin/*路径设置缓存策略为不缓存,避免动态登录请求被静态缓存覆盖。
三、Nginx配置补充
确保代理配置中转发必要头部,让Strapi识别真实请求协议:
server { listen 443 ssl; server_name your-origin-domain.com; location / { proxy_pass http://localhost:1337; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_cache_bypass $http_upgrade; } }
其中X-Forwarded-Proto是核心,确保Strapi知道请求是HTTPS,从而生成带secure属性的Cookie。
四、验证步骤
- 重启Strapi和Nginx服务
- 清除浏览器缓存与Cookie,重新尝试登录
- 检查浏览器控制台,确认
/me等接口的请求头包含正确Cookie,响应状态码为200
内容的提问来源于stack exchange,提问作者XO39
相关产品推荐
相关产品推荐

