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

Nginx无法从localhost获取服务器资源的问题排查求助

问题排查与解决方案

核心原因

你的Nginx配置仅代理了/server/路径下的请求,但页面中JS/CSS资源的引用是绝对根路径(比如/js/main/main.js)。当用户访问https://example.com/server/时,浏览器会直接向https://example.com/js/main/main.js发起请求——这个路径不在/server/的匹配范围内,Nginx会尝试在本地静态文件目录查找,找不到就返回加载失败。

解决方案

方案1:修改Clojure应用的资源路径(推荐)

调整ClojureScript的编译配置,让生成的资源引用带上/server前缀:

  • 在你的CLJS构建配置中(比如shadow-cljs.edn或project.clj),设置:asset-path "/server/js/main"(根据实际资源结构调整)。
  • 重新编译应用,生成的index.html中资源引用会变成/server/js/main/main.js,这类请求会被Nginx的/server/ location捕获并代理到后端。

方案2:扩展Nginx配置,代理资源路径

如果暂时无法修改应用配置,可在Nginx配置中新增针对JS/CSS路径的代理规则:

# 保留原有的/server/配置
location /server/ {
    auth_basic "Server";
    auth_basic_user_file /etc/nginx/pw_file;
    proxy_pass http://localhost:3000/;
    proxy_set_header Host $http_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;
}

# 新增JS资源代理
location /js/ {
    proxy_pass http://localhost:3000/js/;
    proxy_set_header Host $http_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;
}

# 新增CSS资源代理
location /css/ {
    proxy_pass http://localhost:3000/css/;
    proxy_set_header Host $http_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;
}

修改后重启Nginx:sudo systemctl restart nginx

方案3:调整应用部署路径(可选)

如果你的Clojure应用是唯一根路径服务,可将Nginx的根location代理到后端,但这会影响现有其他应用,需谨慎操作:

location / {
    proxy_pass http://localhost:3000/;
    # 保留必要的header配置
}

验证方法

修改完成后,打开浏览器开发者工具(F12)查看网络请求:

  • 确认JS/CSS资源的请求路径正确(要么带/server前缀,要么被Nginx正确代理)
  • 检查请求状态码是否为200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:27:20