• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 如何取得nginx做反向代理时的真实IP?

如何取得nginx做反向代理时的真实IP?

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了nginx ip hash,nginx禁止ip访问,nginx ip,nginx ip访问,nginx 限制ip等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

如何取得nginx做反向代理时的真实IP?


nginx做反向代理时的真实IP.pdf

1.编译

对于client->nginxreverseproxy->apache,

要想在程序中取得真实的IP,在执行nginx的configure时,必须指定参数“--with-http_realip_module”,示例:

./configure--prefix=/data/nginx--with-http_realip_module--with-stream--with-pcre=/tmp/X/pcre-8.32--with-openssl=/tmp/X/openssl-1.0.2a

参数说明:

--prefix=指定安装目录,也就是makeinstall后程序文件等的存放目录

--with-http_realip_module使得程序可以通过环境变量HTTP_X_REAL_IP取得真实的客户端IP地址

--with-stream表示启用TCP代理

--with-pcre=指定依赖的pcre,注意为pcre源代码解压后的目录路径,而不是安装路径

--with-openssl=指定依赖的openssl,注意为openssl源代码解压后的目录路径,而不是安装路径

另外,最简单的确认方法是使用nm命令查看nginx程序文件,看看是否有包含real相关的符号,对于版本nginx-1.9.4,可以发现存在“0809c54btngx_http_realip”。

2.程序代码

测试程序代码(后续测试基于它):

//g++-g-ohello.cgihello.cpp

#include<stdio.h>

#include<stdlib.h>

intmain()

{

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>");

return0;

}

测试是在nginx自带配置文件nginx.conf上进行的修改:

proxy_set_header可以添加在nginx.conf的http段,也可以是server段,还可以是location段,一级一级间是继承和覆盖关系。

3.相关配置

示例:

location/{

#roothtml;

#indexindex.htmlindex.htm;

proxy_passhttp://20.61.28.11:80;

proxy_redirectoff;

proxy_set_headerHost$host;

proxy_set_headerX-Real-IP$remote_addr;#这个是必须的

proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;

}

X-Forwarded-For和X-Real-IP的区别是,如果请求时已带了X-Forwarded-For,则nginx追加方式,这样可以通过它显示转发的轨迹。

当然请求时完全可以构造假的X-Forwarded-For,在配置文件打开了X-Real-IP及编译指定了--with-http_realip_module时,环境变量HTTP_X_REAL_IP总是为真实的客户端IP。

如果是:

client->nginxreverseproxy(A)->nginxreverseproxy(B)->apache

HTTP_X_REAL_IP又会是什么了?

4.测试1

假设如下部署:

client(10.6.81.39)->nginx(10.6.223.44:8080)->nginx(10.6.208.101:8080)->apache(10.6.208.101:80)

?A

假设nginx(10.6.223.44:8080)的配置均为(在nginx默认配置上的修改部分):

server{

listen8080;

server_name10.6.223.44;

location/{

#roothtml;

#indexindex.htmlindex.htm;

proxy_passhttp://10.6.208.101:8080;

proxy_redirectoff;

proxy_set_headerHost$host;

proxy_set_headerX-Real-IP$remote_addr;

proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;

}

假设nginx(10.6.208.101:8080)的配置均为(在nginx默认配置上的修改部分):

server{

listen8080;

server_name10.6.208.101;

location/{

#roothtml;

#indexindex.htmlindex.htm;

proxy_passhttp://10.6.208.101:80;

proxy_redirectoff;

proxy_set_headerHost$host;

proxy_set_headerX-Real-IP$remote_addr;

proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;

}

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何取得nginx做反向代理时的真实IP?

相关文章

  • 2017-05-26Android常见问题及开发经验总结(三)
  • 2017-05-26Android四大组件之Activity
  • 2017-05-26从零开始怎么写android native service?
  • 2017-05-26ViewPager实现滑动翻页效果,viewpager滑动翻页
  • 2017-05-26[android] 手机卫士保存安全号码,android卫士
  • 2017-05-26编译器开发系列--Ocelot语言1.抽象语法树,--ocelot语法
  • 2017-05-26android Android性能优化之如何避免Overdraw,androidoverdraw
  • 2017-05-26单机搭建Android开发环境(一),单机搭建android开发
  • 2017-05-26产品原型图设计,产品原型图
  • 2017-05-26Android开发:Android SDK的介绍

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 《Android权威编程指南(The Big Nerd Ranch Guide)(第二版)》12.4挑战练习,bignerdranch
    • 微信支付,信支付
    • 手机影音7--视频播放器的基本功能(4),7--基本功能
    • 浅谈DrawerLayout抽屉效果,drawerlayout抽屉
    • Android_事件纷发
    • RK3288开发过程中遇到的问题点和解决方法之Kernel,rk3288kernel
    • 设计五(六)大原则,设计原则
    • 8.3.6 Paint API之—— Xfermode与PorterDuff详解(三)
    • Android安全专项-AndBug动态调试工具环境搭建
    • Android通知栏沉浸式/透明化完整解决方案,root不完整解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有