美文网首页
罗大神语录之反向代理获取真实ip

罗大神语录之反向代理获取真实ip

作者: 李相赫的乐芙兰 | 来源:发表于2018-08-28 09:21 被阅读32次

    为了解决nginx反向代理后获取不到ip(通过forward获取不够安全的问题)

    先定义一个自定义的ip传递字段:nipYc59oL4Pm

    nginx在代理后,往header中的此字段写入真实的连接ip

    server {

        listen        80;

        server_name  example.com *.example.com;

        location / {

            proxy_pass        http://localhost:5000;

            proxy_http_version 1.1;

            proxy_set_header  Upgrade $http_upgrade;

            proxy_set_header  Connection keep-alive;

            proxy_set_header  Host $host;

            proxy_cache_bypass $http_upgrade;

            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header  X-Forwarded-Proto $scheme;

            proxy_set_header  $nipYc59oL4Pm;

    proxy_set_header  nipYc59oL4Pm $remote_addr;

        }

    }

    罗金海(罗金海) 08-27 11:15:06

    1,不用 X-Forwarded-For 的原因:

        用户可以模拟发送这个名字的头上来,于是就做了假

    2,不用X-Real-IP的原因

        百度一下就发现大家都用这个名字,容易被猜测

    罗金海(罗金海) 08-27 11:15:58

    所以,大家以后有相似的问题一定要注意:

    如果IP是有意义的,一定不能使用“X-Forwarded-For”因为会被作假

    还有就是web服务端,类似下面的代码是不可取的

    if (exists(header["x-real-ip"]))

      return header["x-real-ip"];

    else

      return remote_addr();

    罗金海(罗金海) 08-27 11:17:33

    看似是方便了两种方案都可以获取到

    罗金海(罗金海) 08-27 11:17:49

    事实上是给获取ip提供了造假的可能性

    罗金海(罗金海) 08-27 11:18:48

    正确的话一定要用配置

    if (config["UseProxyHeaderIP"]))

      return exists(header["x-real-ip"]) ? header["x-real-ip"] : remote_addr();

    else

      return remote_addr();

    罗金海(罗金海) 08-27 11:19:13

    x-real-ip最好修改成一个随机字符串

    罗金海(罗金海) 08-27 11:20:34

    http头基本上都不区分大小写,程序里面习惯用大写

    相关文章

      网友评论

          本文标题:罗大神语录之反向代理获取真实ip

          本文链接:https://www.haomeiwen.com/subject/njffwftx.html