openclaw前端访问gateway仪表盘出现跨域错误,需禁用后端cors中间件(设cors_enabled: false并重启),再通过nginx反向代理统一配置access-control-allow-origin等响应头,同时局域网直连时须启用https以绕过浏览器安全限制。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw部署后前端访问Gateway仪表盘时出现跨域错误,浏览器控制台报“Access to XMLHttpRequest at 'http://192.168.1.100:18789' from origin 'http://localhost:3000' has been blocked by CORS policy”,说明请求被同源策略拦截,必须在服务端或代理层显式放行。
确认并关闭后端自带CORS响应头
OpenClaw Gateway默认启用内部CORS中间件,但该配置与Nginx反向代理叠加会导致Access-Control-Allow-Origin重复写入,触发浏览器拒绝。先检查服务启动日志中是否含CORS enabled字样。
编辑config.yaml,将cors_enabled设为false:
gateway:<br> cors_enabled: false
【必须重启服务】否则配置不生效。这一步不做,后续所有Nginx配置都会因响应头冲突而失效。
用Nginx反向代理统一接管跨域
这是最稳定、零侵入的解法,适用于生产环境且无需修改OpenClaw源码。
第一步:新建/etc/nginx/conf.d/openclaw.conf,内容如下:
upstream openclaw_gateway {<br> server 127.0.0.1:18789;<br>}
第二步:在server块内添加location路由:
location / {<br> proxy_pass http://openclaw_gateway;<br> proxy_set_header Host $host;<br> proxy_set_header X-Real-IP $remote_addr;<br> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br> proxy_set_header X-Forwarded-Proto $scheme;<br> # 拦截OPTIONS预检请求<br> if ($request_method = 'OPTIONS') {<br> add_header Access-Control-Allow-Origin *;<br> add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT, DELETE';<br> add_header Access-Control-Allow-Headers 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';<br> add_header Access-Control-Max-Age 1728000;<br> add_header Content-Type 'text/plain; charset=utf-8';<br> add_header Content-Length 0;<br> return 204;<br> }<br> # 常规请求附加跨域头<br> add_header Access-Control-Allow-Origin *;<br> add_header Access-Control-Allow-Credentials true;<br> add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT, DELETE';<br> add_header Access-Control-Allow-Headers 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';<br>}
第三步:执行sudo nginx -t && sudo nginx -s reload重载配置。若提示nginx: [emerg] unknown directive "if",说明Nginx版本低于1.19,需改用map指令替代if块——此时直接删掉整个if段,仅保留add_header部分即可满足基础需求。
树莓派局域网直连时强制启用HTTPS
当从局域网其他设备(如手机、笔记本)用http://raspberrypi.local:18789访问时,Chrome/Edge会因“非安全上下文访问私有地址”直接拦截,连预检请求都发不出。
方法一:生成自签名证书并启用HTTPS
执行openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /opt/openclaw/cert.key -out /opt/openclaw/cert.pem,按提示填入国家、组织等信息(Common Name填树莓派IP或raspberrypi.local)。
方法二:修改config.yaml启用HTTPS监听:
gateway:<br> https_enabled: true<br> https_key_path: "/opt/openclaw/cert.key"<br> https_cert_path: "/opt/openclaw/cert.pem"<br> port: 18790
重启服务后,浏览器访问https://raspberrypi.local:18790,首次会提示证书不受信任,点击“高级→继续前往”即可。这一步绕过了浏览器对HTTP+私有IP组合的安全限制。
配对验证失败时用命令行跳过审批
仪表盘首次打开显示pairing required且无UI按钮,本质是OpenClaw要求设备身份绑定,但Web界面尚未加载完成就触发了CORS拦截,导致配对JS脚本无法执行。
方法1:终端直连配对
在树莓派上执行openclaw pair --device-name my-pi --token your_gateway_token,token从config.yaml中gateway.token字段获取。
方法2:临时关闭配对检查(仅调试用)
编辑config.yaml,添加security.skip_pairing: true,重启服务。注意:【此设置会降低安全性,上线前务必删除】









