使用Nginx搭建旁路服务器获取客户端真实IP

打印 上一主题 下一主题

主题 805|帖子 805|积分 2415

一、前言

在实际业务开发过程中,很多时间有记录客户端真实IP的需求,但是从客户端发送的请求每每会经过很多代理服务器,导致后端服务获取的IP为代理以后的IP,不具有业务含义。为了办理这个题目,可以搭建一个旁路服务器,前端在发起请求的时间必要先请求旁路服务器,获取该客户端的真实IP(可对该IP地点进行缓存,不必每次发送请求前都先请求旁路服务器),在真正向后端发送请求时,将获取的IP地点放入X-Forwarded-For请求头中,将真实的客户端IP地点进行传递。
二、办理方案

使用Nginx搭建旁路服务器,客户端向后端发送请求时,先请求一次Nginx服务器,返回真实的客户端IP(可将该IP进行缓存,减少旁路服务器请求),在真正向后端发送请求时,将获取的IP地点放入X-Forwarded-For请求头中,将真实的客户端IP地点进行传递。
1. 搭建http协议旁路服务器

1.1 修改Nginx的nginx.conf设置文件,添加返回IP地点的代码:

  1. server {
  2.         listen       80;
  3.         server_name  localhost;
  4.         location / {
  5.             root   html;
  6.             index  index.html index.htm;
  7.         }
  8.                
  9.                 # 添加返回文本格式的IP地址映射,返回请求方IP
  10.                 location /http_ip {
  11.                         default_type text/plain;
  12.                         return 200 $remote_addr;
  13.                 }
  14.                 # 添加返回json格式的IP地址映射,返回请求方IP
  15.                 location /http_json_ip {
  16.                         default_type application/json;
  17.                         return 200 "{"ip":"$remote_addr"}";
  18.                 }
  19.         #error_page  404              /404.html;
  20.         # redirect server error pages to the static page /50x.html
  21.         #
  22.         error_page   500 502 503 504  /50x.html;
  23.         location = /50x.html {
  24.             root   html;
  25.         }
  26.     }
复制代码
2. 启动Nginx

3. 进行请求测试



  • 文本格式:

  • JSON格式

2. 搭建https协议旁路服务器

2.1 生成https证书


  • 下载openssl: openSSL下载地点

  • 安装openssl, 按照提示【下一步】就行
  • 创建私钥,进入到安装目录的bin目录下,在此目录下打开CMD下令窗口,然后执行:
    1. openssl genrsa -des3 -out nginx-https.key 1024
    复制代码
    执行过程中必要设置暗码,任意设置一个就行:

    执行完成以后,会生成私钥文件:

  • 为了后续启动nginx不输入暗码,可以多做一步删除暗码的操作,在CMD窗口执行:
    1. openssl rsa -in nginx-https.key -out nginx-https.key.unsecure
    复制代码
  • 创建 csr 证书
    同样在openssl安装bin目录下,在CMD窗口执行:
    1. openssl req -new -key nginx-https.key.unsecure -out nginx-https.csr
    复制代码
    执行过程中必要输入一些信息,任意输入就行,最后会生成一个csr文件。
  • 生成crt证书:
    1. openssl x509 -req -days 365 -in nginx-https.csr -signkey nginx-https.key.unsecure -out nginx-https.crt
    复制代码
  • 最终生成文件:

2.2 修改nginx启动设置

  1. # HTTPS server
  2.    
  3.     server {
  4.         listen       443 ssl;
  5.         server_name  localhost;
  6.                
  7.                 # 这个是证书的crt文件所在目录
  8.         ssl_certificate      D:/devTools/openssl/service/bin/nginx-https.crt;
  9.                 # 这个是证书key文件所在目录
  10.         ssl_certificate_key  D:/devTools/openssl/service/bin/nginx-https.key.unsecure;
  11.         ssl_session_cache    shared:SSL:1m;
  12.         ssl_session_timeout  5m;
  13.         ssl_ciphers  HIGH:!aNULL:!MD5;
  14.         ssl_prefer_server_ciphers  on;
  15.         location / {
  16.             root   html;
  17.             index  index.html index.htm;
  18.         }
  19.                
  20.                 # 添加返回文本格式的IP地址映射
  21.                 location /http_ip {
  22.                         default_type text/plain;
  23.                         return 200 $remote_addr;
  24.                 }
  25.                 # 添加返回json格式的IP地址映射
  26.                 location /http_json_ip {
  27.                         default_type application/json;
  28.                         return 200 "{"ip":"$remote_addr"}";
  29.                 }
  30.     }
复制代码
2.3 启动Nginx

2.4 进行请求测试



  • 文本格式

  • JSON格式

到此使用Nginx搭建旁路服务器就完成了。
三、注意

使用Nginx搭建旁路服务器虽然可以获取到客户端真实的IP,但是有一个题目,通信过程中请求头可能被第三方窜改,导致获取IP也并非真实IP,这个必要特殊留意。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表