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

Nginx反向代理IIS应用时资源请求路径错误如何修复?

问题修复方案

你的问题核心是IIS应用返回的资源路径是绝对根路径(如/css/main.css),浏览器会直接请求域名根路径而非/app_1/前缀下的路径,导致静态资源、接口请求404或加载失败。以下是几种可行的修复方案:

方案一:通过Nginx的sub_filter重写响应内容

适合无法修改IIS应用代码的场景,让Nginx自动把应用返回的根路径替换为带/app_1/前缀的路径:

修改Nginx的location /app_1/块,添加以下配置:

location  /app_1/ {
    proxy_pass      http://app_1/;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-REAL-SCHEME $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;

    # 开启sub_filter功能
    sub_filter_types text/html text/css text/javascript application/json;
    # 将响应中的根路径/替换为/app_1/
    sub_filter '/' '/app_1/';
    sub_filter_once off;

    access_log /etc/nginx/log/access.log;
    error_log /etc/nginx/log/error.log;
}
  • sub_filter_types指定要处理的响应内容类型,可按需添加;
  • sub_filter_once off确保替换所有匹配的路径,而非仅第一个。

方案二:修改IIS应用的基础路径

如果有权限修改应用配置,这是最彻底的方案:

  • 设置虚拟目录:在IIS中将该应用的虚拟目录路径设为/app_1,应用生成的所有路径会自动带上/app_1前缀;
  • 配置base href:在应用HTML入口文件(如index.html)的<head>中添加<base href="/app_1/">,强制页面内所有相对路径都基于该前缀生成。

方案三:调整Nginx路径映射(需配合应用适配,不优先推荐)

若不想修改响应内容,可调整proxy_pass和rewrite规则,但要求应用能识别不带前缀的路径:

location  /app_1/ {
    rewrite ^/app_1/(.*)$ /$1 break;
    proxy_pass      http://app_1;
    # 其余proxy_set_header配置保持不变...
}

该方案会将/app_1/uri重写为/uri后转发给后端应用,但静态资源请求仍可能存在浏览器请求根路径的问题,因此一般优先选择前两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:36:33