You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx代理noVNC时.js文件返回404,其他端点正常的问题

Nginx代理noVNC时JS文件404的解决方案

问题根源

你的问题出在Nginx的location匹配优先级:正则表达式类型的location(比如你配置里匹配静态资源的location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$)优先级高于前缀匹配的location。当请求/backend/vnc/xxx.js这类资源时,Nginx会优先触发静态资源规则,尝试在本地查找文件,而不是转发到noVNC服务,所以返回404。

解决方法

方法一:提升noVNC代理location的优先级

给noVNC的代理location加上^~修饰符,让它的匹配优先级高于正则规则,同时补充noVNC必需的WebSocket代理配置(noVNC依赖WebSocket传输画面):

location ^~ /backend/vnc/ {
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 1d;
    proxy_pass http://127.0.0.1:5800/;
}

^~的作用是:如果当前前缀是请求路径的最佳匹配,就停止匹配后续的正则location,确保所有/backend/vnc/开头的请求(包括JS、CSS等资源)都被代理到noVNC服务。

方法二:排除静态资源规则对noVNC路径的匹配

如果不想修改代理location的优先级,也可以修改静态资源的正则规则,让它跳过/backend/vnc/路径下的资源:

location ~* ^/(?!backend/vnc/).*\.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
    expires 1h;
}

这里用正则负向前瞻(?!backend/vnc/)排除了以/backend/vnc/开头的请求,确保这类请求会走noVNC的代理规则。

验证步骤

  1. 修改配置后,执行nginx -t检查配置语法是否正确
  2. 确认无误后,执行nginx -s reload重载Nginx配置
  3. 重新访问noVNC页面,检查JS文件是否正常加载

内容的提问来源于stack exchange,提问作者Asker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:32:39