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

使用nginx-proxy路径路由时应用资源出现404错误的解决方法

解决nginx-proxy路径路由下静态资源404问题

核心原因

你配置的VIRTUAL_PATH=/dozzle/仅实现了请求转发,但目标应用(如dozzle)输出的静态资源使用绝对路径(比如/assets/),浏览器会直接请求http://media.local/assets/而非http://media.local/dozzle/assets/,导致资源找不到。

方案1:通过nginx-proxy添加路径重写规则

  1. 在你挂载的./nginx/vhost.d目录下,创建名为media.local的配置文件(文件名必须与VIRTUAL_HOST的值一致)
  2. 写入以下nginx配置:
# 针对dozzle的assets路径做重写
location /assets/ {
    rewrite ^/assets/(.*)$ /dozzle/assets/$1 break;
    proxy_pass http://dozzle:8080/assets/;
    proxy_set_header Host $host;
}

# 通用规则:匹配所有常见静态资源路径(可根据实际调整)
location ~ ^/(assets|js|css|img)/ {
    rewrite ^/(.*)$ /dozzle/$1 break;
    proxy_pass http://dozzle:8080/$1;
    proxy_set_header Host $host;
}
  1. 重启nginx-proxy容器生效:
docker-compose restart nginx-proxy

方案2:配置应用的上下文路径(推荐)

多数支持反向代理的应用都能通过环境变量指定上下文路径,以dozzle为例,它提供BASE_PATH参数,修改你的Docker Compose配置:

dozzle:
    container_name: dozzle
    image: amir20/dozzle:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - VIRTUAL_HOST=media.local
      - VIRTUAL_PATH=/dozzle/
      - VIRTUAL_PORT=8080
      - BASE_PATH=/dozzle/  # 新增该行,指定应用的上下文路径

修改后重启dozzle容器,应用会自动将所有静态资源路径前缀设为/dozzle/,浏览器就能正确请求到资源。

验证方法

访问http://media.local/dozzle/,打开浏览器开发者工具的「网络」面板,确认静态资源的请求路径包含/dozzle/前缀,且返回状态码为200。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:43:33