一、Nginx反向代理配置:

1、虚拟主机配置

复制代码代码如下:
location / {
    try_files $uri @apache;
}

location @apache {
internal;
    proxy_pass http://127.0.0.1:8080;
    include proxy.conf;
}

location ~ .*\.(php|php5)?$  {
    proxy_pass http://127.0.0.1:8080;
    include proxy.conf;
}

2.代理配置

复制代码代码如下:
proxy_connect_timeout 300s;#请求连接后端服务器超时时间。即在规定时间,后端必须响应前端握手请求。
proxy_send_timeout 900;#后端数据回传时间。即在规定时间,后端服务器必须将所有数据回传完毕。
proxy_read_timeout 900;#后端服务器响应时间。即连接成功,在后端排队等候处理不能超过的时间。
proxy_buffer_size 32k;#从后端服务器读取的头信息的缓冲区大小。
proxy_buffers 4 64k;#从后端服务器读取的头信息的缓冲区数目和大小
proxy_busy_buffers_size 128k;#如果服务器繁忙,可申请的proxy_buffers大小
proxy_temp_file_write_size 64k;#代理缓存临时文件大小
proxy_max_temp_file_size 128m;#代理最大缓存临时文件大小
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

二、Apache获取真实IP模块
获取真实IP地址有Apache有2个模块:
mod_rpaf:Apache-2.2支持;Apache-2.4不支持。网上教程很多,而且官网链接已失效
mod_remoteip:Apache-2.4自带模块;Apache-2.2支持;推荐

A、使用mod_rpaf模块
1、安装
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar -xzvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6/
/usr/local/apache/bin/apxs  -i -c -n mod_rpaf-2.0.slo mod_rpaf-2.0.c
2、添加Apache配置

复制代码代码如下:
vi  /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-rpaf.conf
vi /usr/local/apache/conf/extra/httpd-rpaf.conf

LoadModule rpaf_module        modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 10.8.0.110 # 代理服务器的ip地址(记得做相应修改)
RPAFheader X-Forwarded-For

备注:RPAFproxy_ips后面添加代理服务器的ip地址,有几个填几个
3.测试

复制代码代码如下:
# /usr/local/apache/bin/apachectl -t
# /usr/local/apache/bin/apachectl restart
# 看日志是否获取到了真实IP

B、使用mod_remoteip模块
1、Apache-2.2下配置mod_remoteip如下:
1)、安装

复制代码代码如下:
wget https://github.com/ttkzw/mod_remoteip-httpd22/raw/master/mod_remoteip.c
/usr/local/apache/bin/apxs -i -c -n mod_remoteip.so mod_remoteip.c

2)、修改配置文件:

复制代码代码如下:
vi /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-remoteip.conf
vi /usr/local/apache/conf/extra/httpd-remoteip.conf
LoadModule remoteip_module modules/mod_remoteip.so
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1

3)、测试:

复制代码代码如下:
# /usr/local/apache/bin/apachectl -t
# /usr/local/apache/bin/apachectl restart
# 看日志

2、Apache-2.4配置mod_remoteip
自带mod_remoteip模块不需要安装,只需要修改日志格式

复制代码代码如下:
LogFormat "%h %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %a %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedi

在日志格式中加上%a

注意:

1、替换remote.c文件中remote_addr和remote_ip为client_addr和client_ip

LNAMP架构中后端Apache获取用户真实IP地址的2种方法(转)的更多相关文章

  1. Java中使用HttpRequest获取用户真实IP地址端口

    import javax.servlet.http.HttpServletRequest; /** * 自定义访问对象工具类 * * 获取对象的IP地址等信息 * @author X-rapido * ...

  2. Java获取客户端真实IP地址的两种方法

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  3. PHP获取用户访问IP地址的5种方法

    IP地址获得的五种方法: <?php //方法1: $ip = $_SERVER["REMOTE_ADDR"]; echo $ip; //方法2: $user_IP = ($ ...

  4. CDN下nginx获取用户真实IP地址

    随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户 ...

  5. 如何根据HttpServletRequets获取用户真实IP地址

    最近的一个项目的某个功能获取用户的ip地址,添加用户的系统使用记录. 我发现当我直接使用getRemoteAddr()方法从HttpServletRequet中获取用户的ip时,获取到的是服务器的ip ...

  6. asp dotnet core 从 Frp 获取用户真实 IP 地址

    我在本地开一个服务,然后通过 Frp 让小伙伴可以在外网访问我的 API 连接,但是直接通过 RemoteIp 拿到的是本地的地址.本文告诉小伙伴如何通过 Frp 可以拿到用户的真实 IP 地址 我写 ...

  7. 根据HttpServletRequest获取用户真实IP地址

    原因: 当我们通过request获取客户端IP时,自身服务器通常会为了保护信息或者负载均衡的目的,对自身服务器做反向代理.此时如果我们通过request.getRemoteAddr();可能获取到的是 ...

  8. Asp.net获取用户真实Ip地址

    /// <summary> /// 获取远程访问用户的Ip地址 /// </summary> /// <returns>返回Ip地址</returns> ...

  9. 获取用户真实Ip地址

    REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP.如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP.HTTP_CLIENT_IP 是代理服务器发送的HTTP头.如 ...

随机推荐

  1. Webpack使用教程一

    过去数年间,web开发已经从包含少量JavaScript代码的应用发展到到拥有复杂JavaScript代码和代码之间依赖关系树的应用.手动维护这些复杂的代码依赖关系是很麻烦的.Webpack能分析项目 ...

  2. 轻量级模块化开发框架 Hasor 核心模块 v0.0.2 发布

    首先引用Wiki的介绍一下Hasor:     “Hasor是一款开源框架.它是为了解决企业模块化开发中复杂性而创建的.Hasor遵循简单的依赖.单一职责,在开发多模块企业项目中更加有调理.然 而Ha ...

  3. ASP.NET中的KRE是什么?

    KRE的英文全称是K Runtime Environment,其中K是ASP.NET vNext(后来叫ASP.NET 5)的项目代号. KRE是ASP.NET 5运行时环境,它是ASP.NET 5的 ...

  4. 第十一章:Android数据存储(上)

    数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也是开发平台必须提供的基础功能.不光是在Android平台上,在其他的平台上,数据的存储永远是不可缺少的一块.Androi ...

  5. python time

    Python-time 计算程序运行时间 import time start = time.clock() time.sleep(5) end = time.clock() runtime = end ...

  6. 用Redis打造URL缩短服务

    此文章的英文版本已首发于 CodeProject : Building a simple URL shorten service with Redis 阅读文章之前,我建议你先下载源码,一边看文章,一 ...

  7. AngularJS快速入门指南10:DOM节点

    AngularJS通过指令将application数据绑定到HTML DOM元素的属性上. ng-disabled指令 ng-disabled指令将AngularJS application数据绑定到 ...

  8. [ThingWorx] Install PostgreSQL Issue

    ThingWorx application need PostgreSQL, I try configurate it in macbook. The first step is install Po ...

  9. java 解析xml

    http://developer.51cto.com/art/200903/117512.htm

  10. paip.语义分析--单字词名词表

    paip.语义分析--单字名词表   INSERT INTO t (word)  SELECT DISTINCT word FROM `word_main` where tsisin is not n ...