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

2024-02-07 06:52

本文主要是介绍使用Nginx搭建旁路服务器获取客户端真实IP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

在实际业务开发过程中,很多时候有记录客户端真实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地址的代码:
server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}# 添加返回文本格式的IP地址映射,返回请求方IPlocation /http_ip {default_type text/plain;return 200 $remote_addr;}# 添加返回json格式的IP地址映射,返回请求方IPlocation /http_json_ip {default_type application/json;return 200 "{\"ip\":\"$remote_addr\"}";}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
2. 启动Nginx
3. 进行请求测试
  • 文本格式:

    在这里插入图片描述

  • JSON格式

    在这里插入图片描述

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

2.1 生成https证书
  1. 下载openssl: openSSL下载地址

    在这里插入图片描述

  2. 安装openssl, 按照提示【下一步】就行

  3. 创建私钥,进入到安装目录的bin目录下,在此目录下打开CMD命令窗口,然后执行:

    openssl genrsa -des3 -out nginx-https.key 1024 
    

    执行过程中需要设置密码,随便设置一个就行:

    在这里插入图片描述

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

    在这里插入图片描述

  4. 为了后续启动nginx不输入密码,可以多做一步删除密码的操作,在CMD窗口执行:

    openssl rsa -in nginx-https.key -out nginx-https.key.unsecure
    
  5. 创建 csr 证书

    同样在openssl安装bin目录下,在CMD窗口执行:

    openssl req -new -key nginx-https.key.unsecure -out nginx-https.csr
    

    执行过程中需要输入一些信息,随便输入就行,最后会生成一个csr文件。

  6. 生成crt证书:

    openssl x509 -req -days 365 -in nginx-https.csr -signkey nginx-https.key.unsecure -out nginx-https.crt
    
  7. 最终生成文件:

    在这里插入图片描述

2.2 修改nginx启动配置
# HTTPS serverserver {listen       443 ssl;server_name  localhost;# 这个是证书的crt文件所在目录ssl_certificate      D:/devTools/openssl/service/bin/nginx-https.crt;# 这个是证书key文件所在目录ssl_certificate_key  D:/devTools/openssl/service/bin/nginx-https.key.unsecure;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location / {root   html;index  index.html index.htm;}# 添加返回文本格式的IP地址映射location /http_ip {default_type text/plain;return 200 $remote_addr;}# 添加返回json格式的IP地址映射location /http_json_ip {default_type application/json;return 200 "{\"ip\":\"$remote_addr\"}";}}
2.3 启动Nginx
2.4 进行请求测试
  • 文本格式

    在这里插入图片描述

  • JSON格式

    在这里插入图片描述

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

三、注意

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

这篇关于使用Nginx搭建旁路服务器获取客户端真实IP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686882

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可