caddy 或 nginx:如何重写资源文件的位置?

我电脑上有一个软件,可以提供一个webui,但是它很多资源文件是用相对路径引用的,例如

<link rel="stylesheet" href="/css/reset.css" type="text/css" />
<link rel="stylesheet" href="/css/styles_ipad.css" type="text/css" />
<img width="14px" height="18px" src="../images/library@2x.png" />

为了方便访问,我尝试将它用nginx或者caddy反向代理到内网(假设是192.168.8.100)web服务的子路径

当我将这个webui,用nginx或者caddyproxy_pass到子路径http://192.168.8.100/xxxserver的时候,就会产生错误引用,例如:
webui中的/css/reset.css
会指向http://192.168.8.100/css/reset.css
而不是http://192.168.8.100/xxxserver/css/reset.css

webui中的../images/library@2x.png
会指向http://192.168.8.100/images/library@2x.png
而不是http://192.168.8.100/xxxserver/images/library@2x.png

请问我要如何编写rewrite规则,才可以让这个webui正常工作?

以下是我nginx的配置:

upstream xxxserver {
    server 127.0.0.1:18005;
    keepalive 64;
}

  location = /xxxserver {
        return 301 /xxxserver/;
  }

  location ~ /xxxserver/(?<xspath>.*) {
        proxy_redirect off;
        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header Connection "keep-alive";
        proxy_store off;
        proxy_pass http://xxxserver/$xspath$is_args$args;

        gzip on;
        gzip_proxied any;
        gzip_types *;
  }
阅读 1.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题