配置Nginx反向代理ShinobiCCTV后访问路径报错,如何解决?
问题原因及修复方案
核心问题分析
- Nginx代理路径匹配错误:当前
location /shinobi/的proxy_pass未添加尾部斜杠,导致Nginx会把完整的/shinobi/xxx路径转发到Shinobi服务,但Shinobi的路由是基于根路径(/)设计的,无法识别带/shinobi/前缀的请求路径。 - Socket.IO路由不匹配:原配置监听根路径下的
/socket.io/请求,但Shinobi的Socket.IO请求实际会发送到/shinobi/socket.io/路径;同时配置里的Connection头存在语法错误(引号未闭合)。 - 关键代理头缺失:缺少
X-Forwarded-Proto等头信息,Shinobi无法正确识别外部请求的HTTPS协议,可能导致内部URL生成异常。
修复步骤
1. 修正Nginx配置
替换原Nginx配置中的对应块为以下内容:
server { server_name example.com; listen 443 ssl; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } location /shinobi/ { proxy_pass http://127.0.0.1:8080/; # 必须添加尾部斜杠,剥离/shinobi/前缀 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; proxy_set_header Host $host; proxy_redirect off; } location /shinobi/socket.io/ { proxy_pass http://127.0.0.1:8080/socket.io/; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; # 修复引号闭合问题 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; proxy_http_version 1.1; # Socket.IO依赖HTTP/1.1协议 } }
2. 确认Shinobi配置有效性
检查/home/Shinobi/conf.json中的baseURL设置是否正确:
{ "baseURL": "https://example.com/shinobi/" }
3. 重启相关服务
- 重启Nginx:
sudo systemctl restart nginx - 重启Shinobi:
pm2 restart camera
4. 测试访问
重新访问https://example.com/shinobi/{TOKEN}/embed/{GROUP}/{CAMERA}/fullscreen|jquery(或使用编码后的%7C替代|),确认页面正常加载。
内容的提问来源于stack exchange,提问作者s1veme
相关产品推荐
相关产品推荐

