首页 > 网站 > Nginx > 正文

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

2024-08-30 12:23:38
字体:
来源:转载
供稿:网友
怎样才能得到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。
 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表