Docker化Directus+Nginx反向代理的路径重定向问题
解决Nginx反向代理Directus后静态资源丢失/api前缀的问题
问题原因
Directus容器不知道自身运行在/api子路径下,导致生成的管理页面中,静态资源使用相对路径时,浏览器解析时丢失了/api前缀,进而请求错误的URL(如/admin/assets/...而非/api/admin/assets/...)。
最优解决方案:配置Directus的PUBLIC_URL环境变量
在Docker部署Directus时,添加环境变量PUBLIC_URL,指定其对外的完整访问路径:
# Docker run方式添加环境变量 docker run -e PUBLIC_URL=http://example.com/api/ ... directus/directus # Docker Compose方式配置 services: directus: image: directus/directus environment: PUBLIC_URL: "http://example.com/api/" # 其他Directus环境变量...
配置后,Directus会自动为所有静态资源、路由添加/api前缀,生成的脚本引用会变成/api/assets/some-script-file.js,浏览器就能正确请求资源。
备选方案:调整Nginx配置(局限性较大)
若不想修改Directus配置,可新增Nginx规则代理/admin路径:
server { listen 80; server_name example.com; location / { root /usr/share/nginx/html; index index.html index.htm; } location /api/ { proxy_pass http://backend:8055/; 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; } # 新增代理/admin路径 location /admin/ { proxy_pass http://backend:8055/admin/; 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; } }
此方法仅临时解决/admin路径的资源问题,若Directus还有其他子路径(如/assets),仍需逐一添加规则,不如配置PUBLIC_URL彻底。
内容的提问来源于stack exchange,提问作者f_t
相关产品推荐
相关产品推荐

