nginx反向代理让别人的网站内容成为你的网站内容

2023-09-17 13:26:29 浏览数 (2)

本文仅仅作为学习记录,请大家学习的时候尊重网站版权信息。

今天我公司需要让我把a.com网站的内容和对方网站的内容弄的一样,但是我不想把对方网站的程序再给a.com安装一份,于是想到了反向代理,我在宝塔后台添加一个反向代理如下:

代码语言:javascript复制
#PROXY-START/

location ^~ /
{
    proxy_pass http://soft.20230611.cn;
    proxy_set_header Host soft.20230611.cn;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;

    add_header X-Cache $upstream_cache_status;

    proxy_set_header Accept-Encoding "";
	  sub_filter "文本1" "文本2";
    sub_filter_once off;
}

#PROXY-END/

在上面的反向代理中我们看到a.com完全指向了soft.20230611.cn,并且把目标网站的文本1替换为文本2显示。但是很奇怪的是部分接口没有实现替换,通过百度后才知道可能和sub_filter_once off/sub_filter_types有关,sub_filter_once off代表替换多次,sub_filter_types * 代表不管任何类型的数据都要进行替换。完美解决问题。只需要追加以下代码:

代码语言:javascript复制
sub_filter_types *;

当然我们再完整学习下这2个指令,多看下对自己以后有帮助。

在使用 Nginx 时,有时候我们需要对代理请求或响应中的内容进行替换。为了实现这一功能,Nginx 提供了 sub_filter 指令。本文将介绍两个与 sub_filter 相关的重要指令:sub_filter_types 和 sub_filter_once。

sub_filter_types 指令

在配置 Nginx 并启用 sub_filter 模块后,我们还需要使用 sub_filter_types 指令来指定需要执行替换的响应类型。例如:

代码语言:javascript复制
Copy Codehttp {
    # 其他配置...
  
    sub_filter_types *;
  
    # 其他配置...
}

以上示例中的 sub_filter_types * 指令表示对所有类型的响应都执行 sub_filter 替换操作。可以根据实际需求选择特定的响应类型,例如 sub_filter_types text/html 来仅在 HTML 类型的响应中执行替换。

sub_filter_once 指令

默认情况下,Nginx 的 sub_filter 只会替换响应中的第一个匹配项。然而,在某些情况下,我们希望对所有匹配项都执行替换操作。这时就需要使用 sub_filter_once 指令。

例如,以下配置会对所有匹配项进行替换:

代码语言:javascript复制
Copy Codelocation / {
    proxy_pass https://www.example.com;
    sub_filter "example" "replacement";
    sub_filter_once off;
    # 其他指令...
}

在以上示例中,sub_filter_once off 指令告诉 Nginx 对所有匹配项执行替换操作,而不仅仅是第一个匹配项。

需要注意的是,开启 sub_filter_once off 可能会对性能产生一定影响,因为 Nginx 需要遍历整个响应内容以查找所有匹配项。因此,在使用 sub_filter_once 指令时,需要根据实际情况权衡性能和功能需求。

0 人点赞