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

NGINX多站点部署:如何仅代理上游API请求不代理静态资源

NGINX 单域名多Angular站点静态资源+API代理配置方案

核心逻辑是利用NGINX的location匹配优先级,将API请求和静态资源请求拆分处理:匹配精度更高、带^~修饰符的API规则会优先命中,不会落到静态资源的alias规则上,两类请求互不干扰。

具体配置步骤

  • 首先在server块外定义Tomcat的上游服务池
upstream tomcat_backend {
    server 你的Tomcat服务IP:端口; # 比如127.0.0.1:8080
    keepalive 32;
}
  • 在server块内,把API代理规则写在静态资源规则的前面,确保优先匹配。以下是完整的server块参考配置:
server {
    listen 443 http2 ssl;
    server_name  site.local;
    # 省略SSL证书、日志、上传大小限制等全局配置

    # site1 API请求代理规则
    # ^~ 修饰符表示匹配到该前缀后不再检索其他正则/低优先级规则
    location ^~ /site1/api/ {
        # 重写路径,去掉URL里的/site1前缀,还原成Tomcat实际的接口路径
        rewrite ^/site1/(.*)$ /$1 break;
        proxy_pass http://tomcat_backend;
        # 通用代理请求头配置
        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;
    }

    # site2 API请求代理规则
    location ^~ /site2/api/ {
        rewrite ^/site2/(.*)$ /$1 break;
        proxy_pass http://tomcat_backend;
        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;
    }

    # 静态资源处理规则,仅非API请求会走到这里
    location /site1 {
        alias  /usr/share/nginx/html/site1/dist/; # 替换为site1打包文件的实际存放路径
        index index.html;
        # 适配Angular单页应用路由,解决页面刷新404问题
        try_files $uri $uri/ /site1/index.html;
    }

    location /site2 {
        alias  /usr/share/nginx/html/site2/dist/; # 替换为site2打包文件的实际存放路径
        index index.html;
        try_files $uri $uri/ /site2/index.html;
    }
}

注意事项

  • 上述配置默认前端所有API请求带统一/api前缀,如果你的项目用的是其他标识(比如/rest、/service),直接替换location匹配的路径即可。如果前端接口没有统一前缀,必须先和前端约定加统一前缀,否则NGINX无法区分同一前缀下的请求是静态资源还是接口,规则无法生效。
  • 之前直接在/site1的location块里配置proxy_pass导致静态资源被代理,是因为location /site1会匹配所有以/site1开头的请求,不管是静态资源还是接口,全部转发给上游服务,自然会导致静态资源加载失败。
  • 配置修改完成后先执行nginx -t检查语法是否正确,确认无报错后执行nginx -s reload重载配置即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:45:37