Nginx 反向代理的时候 替换图片的地址应该怎么写?

6 min read

图片的原始 url

/?page=logo&xxxxxx

比如替换成

https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
在 Nginx 反向代理配置中,可以使用 sub_filter 指令来替换图片的地址。具体的配置语句如下:

location / {
    proxy_pass http://backend;
    sub_filter '/?page=logo&' '/';
    sub_filter_types *;
    sub_filter_once off;
}

解释:

  • sub_filter '/?page=logo&' '/':表示将原始 url 中的 /?page=logo& 替换为 /
  • sub_filter_types *:表示对任意类型的响应都进行替换,包括 HTML、JS、CSS 等文本和二进制文件。
  • sub_filter_once off:表示在一次响应中进行多次替换。

如果图片本身的格式需要进行替换,可以在 sub_filter 指令中使用正则表达式。例如:

location / {
    proxy_pass http://backend;
    sub_filter '/?page=logo&' '/';
    sub_filter_types *;
    sub_filter_once off;
    sub_filter 'img/PCtm_[0-9a-f]+\\.png' 'img/new_logo.png';
}

其中,正则表达式 'img/PCtm_[0-9a-f]+\\.png' 匹配原始 url 中的图片地址,'img/new_logo.png'则是替换后的地址。这样在反向代理的响应中,原始页面中的图片地址会被替换为新的地址。