OpenClaw部署后页面白屏且静态资源404,根本原因是前端构建产物路径与Nginx路由映射不匹配:若dist目录含/static/js/但服务未将/static/映射至dist/static/,或publicPath配置为绝对路径导致HTML中资源路径错误,均会引发404;须检查构建输出结构、统一设publicPath为'./'、并用root或alias正确配置Nginx静态资源路由。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw部署后页面白屏或按钮图标不显示,浏览器控制台报错Failed to load resource: the server responded with a status of 404 (),/static/js/main.789xyz.js、/assets/icon.svg等路径全部404,说明前端构建产物未被正确服务——这不是代码bug,而是资源路由映射断裂。
确认构建产物中静态资源的真实路径结构
进入OpenClaw项目构建输出目录(通常是dist或build),执行ls -R | grep -E "\.(js|css|svg|png)$",观察文件是否真实存在于子路径中。若看到dist/static/js/main.789xyz.js但浏览器请求的是/static/js/main.789xyz.js,则说明服务端未将/static/映射到dist/static/;若dist下根本没有static目录,而是直接有js/和assets/,则说明构建时publicPath配置错误,必须回退修改再重新build。
这一步不能跳过。很多团队直接拷贝dist内容到Nginx html目录,却没检查内部层级是否与HTML中<script>标签的src路径一致。</script>
修复Nginx对OpenClaw静态资源的路由映射
方法一:用root指令直指dist根目录(推荐)
在Nginx server块中添加:location / { root /path/to/your/openclaw/dist; try_files $uri $uri/ /index.html; }
注意:【root路径末尾不加斜杠】,且该路径必须是dist的绝对路径(如/var/www/openclaw/dist),不是dist的父目录。写成root /var/www/openclaw/会导致所有静态资源请求多拼一层dist,变成/dist/static/js/…而404。
方法二:用alias精确匹配静态资源前缀
当需保留API代理共存时,单独处理静态资源:location ^~ /static/ { alias /path/to/openclaw/dist/static/; } location ^~ /assets/ { alias /path/to/openclaw/dist/assets/; }
自动备份 OpenClaw 整体配置到远程存储(支持任意 rclone 后端:COS、S3、FTP、SFTP、WebDAV等)。 触发场景: - 创建/配置自动备份任务 - 设置备份周期、保留份数、目标目录 - 手动触发备份 - 查看/恢复备份 - OpenClaw 运行异常时的提醒
注意:【alias路径末尾必须加斜杠】,否则Nginx会把/assets/logo.svg解析为/path/to/openclaw/dist/assetslogo.svg(缺/导致路径粘连)。
强制修正前端构建时的publicPath
第一步:打开OpenClaw项目的构建配置文件
若为Vue CLI项目,编辑vue.config.js;若为Vite项目,编辑vite.config.ts;若为Webpack原生配置,定位webpack.config.js中的output.publicPath。
第二步:将publicPath统一设为相对路径
Vue CLI:module.exports = { publicPath: './' };Vite:export default defineConfig({ base: './' })。绝对路径如'/openclaw/'或'/'极易与反向代理路径冲突,尤其当OpenClaw部署在子路径(如https://example.com/claw/)时,必须配合Nginx location重写,复杂度陡增。
第三步:删除dist目录 → 重新npm run build → 验证dist内所有HTML中script与link标签的src/href均以./开头(如./static/js/main.js),而非/static/js/main.js或/ static/js/main.js。
这一步操作起来很简单,直接把文件拖进去就行。但漏掉会导致后续所有Nginx配置都无效——因为请求路径从源头就错了。

















