当前位置 主页 > 服务器问题 > nginx问题汇总 >

    怎样才能得到nginx做反向代理时的真实IP?

    栏目:nginx问题汇总 时间:2019-07-05 10:26

    怎样才能得到nginx做反向代理时的真实IP?
      nginx在转发的时候可以通过添加特定的头来显示原始IP地址 通常使用X-Forwarded-For或CLIENT_IP来表示原始IP地址 IP地址都是以逗号来追加IP地址 所以取该请求头的第一个值,一般就是原始的IP地址。

      测试程序代码(后续测试基于它):
      // g++ -g -o hello.cgi hello.cpp
      #include <stdio.h>
      #include <stdlib.h>
      int main()
      {
      printf("Content-Type: text/html; charset=utf-8\r\n\r\n");printf("<p>HTTP_X_FORWARDED_FOR: %s\n", getenv("HTTP_X_FORWARDED_FOR"));printf("<p>HTTP_X_REAL_IP: %s\n", getenv("HTTP_X_REAL_IP"));printf("<p>REMOTE_ADDR: %s\n", getenv("REMOTE_ADDR"));printf("<p>");
      return 0;
      }
      测试是在nginx自带配置文件nginx.conf上进行的修改:
      proxy_set_header可以添加在nginx.conf的http段,也可以是server段,还可以是location段,一级一级间是继承和覆盖关系。
      如果正确编译和配置了nginx反向代理,当只有一层nginx反向代理时,可以通过“HTTP_X_REAL_IP”取得client的真实IP。
      如果有二层nginx反向代理,则client的真实IP被包含在“HTTP_X_FORWARDED_FOR”中。
      最不可信的是“REMOTE_ADDR”,它的内容完全可以被client指定!总之只要编译和配置正确,“HTTP_X_FORWARDED_FOR”总是包含了client的真实IP。