nginx在做反向代理的时候,后端的nginx web服务器log中记录的地址都是反向代理服务器的地址,无法查看客户端访问的真实ip。

在反向代理服务器的nginx.conf配置文件中进行配置。

 location /bbs {
proxy_pass http://192.168.214.131/bbs;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

在后端的nginx web服务器上,要确认nginx有没有编译安装 --with-http_realip_module模块。

realip 模块的作用是:当本机的nginx处于一个反向代理的后端时获取到真实的用户IP。

如果没有realip模块,nginx的access_log里记录的IP会是反向代理服务器的IP,PHP中$_SERVER[‘REMOTE_ADDR’]的值也是反向代理的IP。

而安装了realip模块,并且配置正确,就可以让nginx日志和php的REMOTE_ADDR都变成真实的用户IP。

如果后端nginx没有安装realip模块,可以在线平滑添加新模块

nginx添加realip模块,(这里是后端web服务器)
先查看已经编译过的模块 /usr/local/webserver/nginx/sbin/nginx -V

1、cd nginx-1.8.0
    2 、/configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre=/mnt/lnmp/pcre-8.31 --with-http_realip_module    3、           3、make     --不要make install 否则会覆盖以前的配置文件

4 、 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

5、 cp objs/nginx       /usr/local/nginx/sbin/       #如果出现  “nginx正在忙的提示”  先停止nginx运行
    6、 /usr/local/nginx/sbin/nginx -V
    7、 /usr/local/nginx/sbin/nginx

  

然后在后端nginx web服务器的nginx.conf配置文件中进行修改。

          proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
set_real_ip_from 192.168.214.132; #set_real_ip_from指令是告诉nginx 192.168.214.132是我们的反代服务器,不是真实的用户IP real_ip_header X-Real-IP; #real_ip_header则是告诉nginx真正的用户IP是存在X-Forwarded-For请求头中
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

同时启用web服务器的日志记录,使用默认即可。

http {
include mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; ....

  

ngx_http_realip_module使用详解

https://leo108.com/pid-2132/

nginx反向代理后端web服务器记录客户端ip地址的更多相关文章

  1. nginx反向代理三台web服务器,实现负载均衡

    修改nginx.conf #在http和server之间加入这个模块 upstream guaji{ server 127.0.0.1:8080; server 127.0.0.2:8080; ser ...

  2. linux---nginx服务nfs服务nginx反向代理三台web

    一:nginx服务 1.二进制安装nginx包 [root@bogon ~]# systemctl disable firewalld #关闭Firewalls自启动 Removed symlink ...

  3. Linux之nginx反向代理+三台web+nfs共享存储实现集群配置

    作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...

  4. golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web

    golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web Nginx 部署 - beego: 简约 & 强大并存的 Go 应用框架https://bee ...

  5. Linux之nginx反向代理三台web

    作业三:nginx反向代理三台web 实现基于轮询的方式调度三台web,并验证结果 实现基于权重的方式调度三台web,并验证结果 实现基于hash的方式调用三台web,并验证结果 [root@loca ...

  6. 使用nginx反向代理到不同服务器(共享同一端口)配置文件

    使用nginx反向代理到不同服务器(共享同一端口)配置文件 https://blog.csdn.net/wang_k_123/article/details/72779443 https://www. ...

  7. nginx反向代理-后端服务器组设置

    nginx服务器的反向代理时其最常用的重要功能之一,在实际工作中应用广泛,涉及的配置指令也比较多.下面会尽量详细地介绍对应的指令,及其使用状态. 反向代理一般是互联网需要向内网拉取资源,比如访问一个w ...

  8. Nginx反向代理 实现Web负载均衡

    实现负载均衡的方式有很多种,DNS.反向代理.LVS负载均衡器(软件实现).F5(负载均衡器,硬件,非常昂贵)这里我们只提到基于DNS,以及反向代理的方式来实现负载均衡Web服务       DNS服 ...

  9. Nginx反向代理后应用程序获取客户端真实IP

    Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的 ...

随机推荐

  1. QueueUtil

    import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import org.slf4 ...

  2. jquery——事件冒泡、事件委托

    一个事件冒泡的例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  3. git commit之后撤销

    先git log 查看日志,找到需要回退的那次commit的哈希值 然后git reset --soft commit_id ok

  4. Hyperspace Travel

    https://www.hackerrank.com/contests/infinitum16-firsttimer/challenges/hyperspace-travel 给出n个点,是一个m维坐 ...

  5. hadoop map 个数 源码分析

    本文转自http://ronxin999.blog.163.com/blog/static/42217920201279112163/

  6. matlab 打不开excel文件

    方法论 excel的后缀为.xls, matlab是无法识别的, 需要将其另存为.xlsx文件格式 打开excel, 点击save as, 选中保存的文件格式是.xlsx即可

  7. ORA-02298: 无法验证 (约束) - 未找到父项关键字 解决办法

    --在用PL/SQL导入表数据的时候报错 ORA-02298: 无法验证 (PNET.POST_CLOB_FK) - 未找到父项关键字 --发现是启用外键约束时报的错alter table DM_VO ...

  8. Jedis使用工具类

    Redis 使用工具类: package com.qlwb.business.common.redis; import org.apache.log4j.Logger; import redis.cl ...

  9. DataBinding 访问 3

    MVVM中的Model 我们可以用任何POJO 作为 data binding 的 Model, 但是直接修改POJO对象,不能直接更新UI android的 dataBinding 模块 给提供了通 ...

  10. 什么是Spring

    之前已经学习过web三层(数据库链接层dao,业务逻辑控制层service,用户层web). 在开发过程中,我们不断引入更加优秀的工具的目的都是在安全.高效的基础上,简化开发,和易于维护. 所以引入s ...