• 宾果💯
    2019-03-13
    一、这里的proxy,及realip里的set_real_ip_from,两个东西不理解。这两处同时配置会发生覆盖吗?还是说proxy只会在geo模块中生效。这样的配置对请求有什么样的影响,比如,这节课案例中的proxy设置成2.2.2.2,对结果会有影响吗?
    二、我的虚拟机里启动了两个nginx,当用ps命令去找master进程时,区分不了(有两个master进程)

    作者回复: 1、会互相影响,但不是覆盖。这个比较复杂,我解释下最复杂的场景:
    a. 客户端是127.0.0.1
    b. 请求携带X-Forwarded-For: 2.2.2.2头部
    c. 请求携带X-Real-IP: 3.3.3.3头部
    d. Nginx配置了realip模块,设置set_real_ip_from 127.0.0.1;,使用默认的X-Real-IP头部。
    e. geo中配置的proxy 3.3.3.3;
    那么,此时geo中产生的变量依据的IP地址是2.2.2.2。
    原因是,realip模块修改了remote_addr变量,而proxy后使用的地址,也要使用修改后的remoete_addr变量。

    2、找到进程id,然后用ls -l /proc/进程id/cwd找到启动路径,再判断

    
     2
  • 不惑ing
    2019-01-09
    您好,又翻了相关几节课视频,proxy的意义是指定信任的服务器ip么?可以指定多台服务器么,比如ip段、正则匹配?

    作者回复: 对的。可以指定多台服务器,可以使用子网掩码的方式指定一段IP地址,不能使用正则匹配。

    
     2
  • 不惑ing
    2019-01-09
    您好,请问proxy是可以随便写么?只要有值就能达到remote_addr取最后一个ip的效果么

    作者回复: 在生产环境下,proxy不能随便写,通常必须是nginx的直接下游服务器的地址(如果有的话)。

    
     2
  • 星极
    2019-11-07
    老师您好,我看了你回复宾果100的评论,有些困惑,d中说Nginx配置了realip模块,并且使用默认的X-Real-IP头部,那这样的realip会把$remote_addr改为3.3.3.3,e中又说在geo中proxy 3.3.3.3,还是不明白为什么geo中产生的变量依据的IP地址是2.2.2.2?这中间发生了什么

    作者回复: geo是你在使用geo变量的时候才有用。你在geo里配置了proxy 3.3.3.3,那么此时如果remote_addr已经被realip模块改成了3.3.3.3,那么geo此时认为匹配上了,它会自动的去取X-Forwarded-For里的IP作为geo键值对匹配中的键。
    给你一段示例代码,你访问curl localhost:8060 -H 'X-Real-IP: 3.3.3.3' -H 'X-Forwarded-For: 2.2.2.2',返回的是remote_addr: 3.3.3.3,geo: 2。
    geo $geo {
            2.2.2.2 2;
            3.3.3.3 3;
            proxy 3.3.3.3;
    }
    server {
            listen 8060;
            set_real_ip_from 127.0.0.1;
            real_ip_header X-Real-IP;
            location /{
                    return 200 "remote_addr: $remote_addr,geo: $geo\n";
            }
    }

    
    
  • 宾果💯
    2019-03-13
    老师,这节课疑问还蛮多的:-)
    1、address有这个变量吗,我往geo后输入$address之后就报错了
    nginx: [emerg] unknown "address" variable
    2、课件中“通过proxy指令指定可信地址(参考realip模块),此时remote_addr的值为X-
    Forwarded-For头部值中最后一个IP地址”这句话是不是不对呀,我实验的结果是remote_addr的值未变,只是geo模块取了X-Forwarded-For头部值中最后一个IP地址
    展开

    作者回复: 1、这个$address,其实是代指表示地址的变量,而不是明确指 address。所谓不输入$address,是指省略这个位置的参数。
    2、关于如何修改remote_addr变量的值,参见第50课,在post_read阶段会改remote_addr变量指向的内存值,后续再使用到这块内存值时才会获得改变后的地址

    
    
  • yuanlinios
    2019-02-04
    老师能解释一下 geo 指令下 delete 参数的含义吗?

    delete
    deletes the specified network (0.7.23).

    官网的解释没有搭配例子, 不知道具体怎么用
    展开

    作者回复: 因为geo里的key大都是网段,而网段非常有可能重合,这样delete可以其中一部分子网的映射规则去掉,改用其他匹配上的值。比如:
        geo $geo_delete {
            127.0.0.0/8 loopback;
            0.0.0.0/0 world;
            delete 127.0.0.0/8;
        }
    如果不加delete,那么本地访问是值为loopback,而加入delete后,就会匹配上0.0.0.0即default

    
    
  • Panda
    2019-01-08
    可以通过GEO模块 匹配到 IP的 归属范围

    作者回复: 是的

    
    
我们在线,来聊聊吧