配置Strapi通过Nginx代理实现SSL访问时/api路径无法访问
问题诊断与解决方案
你的问题核心是Nginx代理路径匹配错误,以及Strapi的代理信任配置缺失,导致请求转发后无法匹配Strapi的原始路由。以下是具体修复步骤:
1. 修正Nginx代理配置
当前Nginx的location /api/配置中,proxy_pass末尾缺少斜杠,导致请求会带着/api前缀转发到Strapi,而Strapi的原始路由并没有这个前缀(你直接访问http://11.222.3.44:1337/uploads/...正常,说明Strapi路由无/api前缀)。
修改/etc/nginx/sites-available/default中的location /api/块:
location /api/ { proxy_pass http://localhost:1337/; # 必须添加末尾的斜杠 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 告诉Strapi当前使用HTTPS }
- 末尾斜杠的作用:Nginx会将
/api/后面的路径直接追加到proxy_pass的URL后,例如请求/api/uploads/mypicture.jpg会转发为http://localhost:1337/uploads/mypicture.jpg,和你直接访问的路径一致。 - 添加额外的
proxy_set_header:确保Strapi能正确获取客户端IP和协议信息,避免HTTPS相关的问题。
修改后重启Nginx:
sudo systemctl restart nginx
2. 调整Strapi的代理信任配置
Strapi需要明确信任Nginx代理,才能正确处理转发的请求。修改backend/config/server.js:
module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), url: "https://mywebsite.de/api", proxy: { enabled: true, ip: true, // 信任代理传递的IP }, admin: { auth: { secret: env('ADMIN_JWT_SECRET', 'mysecret'), }, }, });
proxy.enabled: true:开启代理支持,让Strapi识别来自Nginx的转发请求。- 保留
url配置:确保Strapi生成的管理后台链接、资源URL(如上传文件)正确指向https://mywebsite.de/api。
3. 验证CORS配置(可选但重要)
如果前端需要从mywebsite.de请求Strapi接口,确保Strapi的CORS允许该域名。修改backend/config/security.js:
module.exports = ({ env }) => ({ cors: { enabled: true, origin: ['https://mywebsite.de'], // 允许前端域名访问 }, });
4. 重启Strapi服务
cd /home/debian/backend npm run develop # 开发环境 # 生产环境使用 npm run start
测试验证
- 访问
https://mywebsite.de/api/uploads/mypicture.jpg,应该返回200。 - 访问
https://mywebsite.de/api/admin,应该能正常进入Strapi管理后台。 - 查看Strapi日志,应该不会再出现
GET /api/ (20 ms) 404的错误。
内容的提问来源于stack exchange,提问作者googleman
相关产品推荐
相关产品推荐

