Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

多级反向代理抓出真实ip

  • 如果自己这一级nginx的上面,

    • 还有一个nginx反向代理,且其ip为23.23.23.23
    • 那我们用$remote_addr获取到的都是这个ip,这是不对的
    • 必须要还原出用户的真实ip
      server {
      
          #ssl相关
      
          set_real_ip_from 23.23.23.23;
          real_ip_header    X-Forwarded-For;
      
          localtion / {
      
          }
      }
      
      • 相当于告诉nginx,23.23.23.23是我们上一级反代,别直接当成用户了,你要去X-Forwarded-For里面往前找
  • 如果自己这一级nginx的上面,

    • 还有两级nginx反向代理,ip分别为
      • 23.23.23.23(最近的)
      • 12.12.12.12(较远的)
    • 如果这两级是平级的,不分远近,也是这样设置
    • 必须要还原出用户的真实ip
      server {
      
          #ssl相关
          
          
          set_real_ip_from 23.23.23.23;
          set_real_ip_from 12.12.12.12;
          real_ip_header    X-Forwarded-For;
          real_ip_recursive on;
      
          localtion / {
      
          }
      }
      
      • 先写最近的,再写较远的
      • 还要开启real_ip_recursive,表示多级追溯
      • 相当于告诉nginx,23.23.23.23是我们上一级反代,12.12.12.12更是我们上上级反代,别直接当成用户了,你要去X-Forwarded-For里面找到最后一个不是反代的IP,这才是真实用户ip
  • 经过上面的折腾,后面的变量$remote_addr,表示的就是真实用户ip了