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

Docker与Nginx反向代理下静态资源服务异常排查

问题分析与解决方案

你的配置存在多处关键问题,导致无法实现预期效果,以下是具体修正方案:

核心问题梳理

  1. 访问逻辑错误:你配置Nginx监听80端口,但直接访问localhost:8080会绕过Nginx直接请求Tomcat,自然无法触发Nginx的静态资源处理规则。
  2. Nginx路由缺失:未针对/assets-path配置对应location规则,无法将该路径请求指向挂载的静态目录。
  3. Docker镜像不匹配:Dockerfile构建的是Nginx镜像,但docker run使用了httpd:local(Apache镜像),完全不对应。
  4. 挂载路径格式错误:-v assets-path:/usr/share/nginx/html中的assets-path如果是本地目录,需使用相对/绝对路径,否则Docker会创建同名volume而非挂载本地目录。
  5. 空location块无效:配置中/so/等空location块没有任何指令,不会产生实际作用。

修正后的配置

1. Dockerfile(确认构建镜像名)

FROM nginx:1.21.6-alpine
COPY ./default.conf /etc/nginx/conf.d/

先执行构建命令生成自定义Nginx镜像:

docker build -t nginx:local .

2. default.conf(关键路由修正)

proxy_set_header Host $http_host;

server {
    listen       80;
    server_name  localhost; # 匹配访问域名,避免无效匹配
    root   /usr/share/nginx/html;

    # 处理/assets-path路径的静态资源请求
    location /assets-path/ {
        try_files $uri $uri/ =404; # 优先匹配静态文件,不存在返回404
    }

    # 其他所有请求反向代理到Tomcat的8080端口
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 若/so/、/ol/等路径也需静态资源服务,参照/assets-path配置,否则删除空块
    # location /so/ {
    #     try_files $uri $uri/ =404;
    # }
}

3. Docker Run命令(修正镜像与挂载路径)

假设本地静态资源目录为当前目录下的assets-path,执行:

docker run -d --network=host -v ./assets-path:/usr/share/nginx/html/assets-path:Z -p 80:80 nginx:local
  • --network=host:让容器共享主机网络,确保Nginx能访问主机上的localhost:8080(Tomcat服务)
  • -v ./assets-path:/usr/share/nginx/html/assets-path:将本地静态目录挂载到容器内对应路径
  • nginx:local:使用你构建的自定义Nginx镜像,替代错误的Apache镜像

验证方式

访问localhost/assets-path/xxx.js(替换为实际静态文件名),Nginx会返回挂载目录下的静态资源;访问其他路径(如localhost/)则会反向代理到Tomcat的8080端口。

若坚持要通过localhost:8080/assets-path访问静态资源,需修改Tomcat配置将该路径反向代理到Nginx的80端口,但更合理的方式是统一通过Nginx的80端口处理所有请求,避免端口混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:17:19