nginx有着会不同的模块,可以到nginx的路径下执行./nginx -V来确定拥有那些模块

记录真实ip

add_header来设置请求头的属性,同时可以用remote_addr和X-Forwarded-For来记录请求的真实地址来源以及经过的最后一个跳转地址。

例如

set $XFF $remote_addr;
if ($http_x_forwarded_for != "") { 
    set $XFF $http_x_forwarded_for;
}
proxy_set_header X-Forwarded-For $XFF;

修改返回值

众所周知,一次请求分为request和response,request,我们可以用proxy_pass和rerewrite来进行跳转,

sub_filter_once off;

这一段表示是否开启sub_filter模块

sub_filter_types *;

这一段表示都有哪些需要被替换,*代表要对整个返回值无论是html还是json进行内容替换。

sub_filter "aa" "bb";

这一段代表真实的需要被替换的内容,比如返回值中出现了http://aa.com,经过nginx的sub_filter之后,会返回http://bb.com,因此sub_filter在面对线上bug不方便重启服务器时,可以配合proxy_pass作为临时解决方案来调整

注意

sub_filter有一个特性,就是比如返回值中有一段代码如下

www.regskynet.com
www.regskynet.com/asd

此时,如果配置了

sub_filter "www.regskynet.com" "www.aa.com";
sub_filter "www.regskynet.com/asd" "www.bb.com";

则结果会为

www.aa.com
www.aa.com/asd

因为sub_filter是有顺序的,前一行会比后一行先对全文中出现的内容进行替换,而且一旦前一行替换之后,后一行将不再对此内容进行替换,所以,如果出现了有重复内容(例如上面的结果,asd不想变,只更换baidu),可以使用以下
sub_filter "www.regskynet.com/asd" "www.regskynet.com/asd";
sub_filter "www.regskynet.com" "www.aa.com";

Last modification:November 24th, 2019 at 09:55 pm