【Nginx开发】如何使用Nginx搭建旁路服务器获取客户端IP

news/2025/2/21 17:30:56/文章来源:https://www.cnblogs.com/o-O-oO/p/18729653

一、前言

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

二、解决方案

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

2.1 搭建http协议旁路服务器

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.2 搭建https协议旁路服务器

1、生成https证书

(1)下载openssl:

https://slproweb.com/products/Win32OpenSSL.html

(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、 修改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\"}";}}

3 、启动Nginx
4 、进行请求测试

• 文本格式

• JSON格式

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

三、注意

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

原创 Coder文小白

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/887680.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyBy2:若依计划任务自动化上线+内存马自动生成v2.0

免责声明 本公众号文章以技术分享学习为目的。由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!前言 攻防中,遇到一个ruo…

当任务失败时,顶级调度系统如何实现分钟级数据补偿?

一、补数机制的定义与挑战 补数(Backfill) 指在数据管道因系统故障、数据延迟或逻辑错误导致历史任务缺失时,重新调度并执行指定时间范围内的工作流以修复数据缺口。在大数据场景中,补数机制需解决三大核心挑战:复杂依赖链重建:需精准识别历史时间段内任务上下游关系,避…

绿色建筑设计原则与案例分析 - 如何将环保理念融入建筑设计中

在这个追求可持续发展的时代,绿色建筑不仅是一种趋势,更是对地球未来的责任和承诺。它旨在通过最少的环境影响,提供健康、高效、舒适的生活与工作空间。本文将深入探讨绿色建筑设计的核心原则,并通过具体案例分析,揭示如何将环保理念巧妙融入建筑设计之中,为读者呈现一场…

Windows 程序隐藏启动黑窗口总结

免责声明: 该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。以下文章来源于锦鲤安全 ,作者四五qq 前言 Windows 控制台程序在启动时会出现一个黑(dos)窗口,一般我们想要隐…

docker部署.net core3.1

1.安装dockerapt install docker.io2.拉取.net core依赖镜像docker pull mcr.microsoft.com/dotnet/core/aspnet:latest3.创建.net core3.1项目 选择docker支持,会生成dockerFile配置文件如图:4.编写dockerfile文件,经删减后为:FROM mcr.microsoft.com/dotnet/core/aspnet:3…

DeepSeek 满血版在 VScode 和 IDEA 中怎么用?手把手教程来了

DeepSeek 满血版在 IDEA 中怎么用?手把手教程来了作者:沉默王二近期有几个热点事件,不知道大家关注到没有?第一个标志事件,一向挑剔的苹果宣布和阿里合作,一起为国行版 iPhone 提供 AI 技术服务。 第二个标志事件,DeepSeek R1 蒸馏了 6 个模型开源给社区,其中有 4 个来…

redission-delay-queue使用及原理

1.引入jar包<dependency><groupId>xxxx.delay</groupId><artifactId>redisson-delayed-queue</artifactId><version>1.0.0-SNAPSHOT</version> </dependency>2.客户端代码开发2.1:新增实现BaseTask的bean 参数由业务自行决定…

利用网页爬虫从专业产品论坛提取评论的完整指南

了解如何通过网页爬虫从专业产品论坛提取评论,以获取可操作的洞见、改进策略,并节省时间。利用网页爬虫从专业产品论坛提取评论已经成为企业的游戏规则改变者。它使您能够从多个平台收集客户反馈(https://dataforest.ai/blog/top-web-scraping-use-cases),实时监控情绪,并自…

树的重心(树形dp)

我最开始将n减了1,应为边长有n-1条,但是这会导致计算时出现错误,因为其他地方会用到n#include<iostream> #include<vector> using namespace std; const int N=1e5+5; vector<int>v[N]; int f[N]; int vis[N]; int ans=1e5; int n; int dfs(int x){vis[x]…

仓库管理到底该怎么管?记住这五常六准原则!

仓库管理到底该怎么管? 要是你觉得仓库只是个“堆货的地方”,那可就大错特错了! 想象一下,货物乱成一团,找东西时费劲,出库慢,结果错发了货,那可真的是“大麻烦”啊。 客户打电话来投诉,老板又来催货,这种情况谁遇到谁头疼。 但其实,仓库管理不复杂,只要掌握了一些…

让窗口显示在所有虚拟桌面上

功能如图 C#代码实现如下public partial class MainWindow : Window {public MainWindow(){InitializeComponent();ShowInTaskbar = false;this.Loaded += MainWindow_Loaded;}private void MainWindow_Loaded(object sender, RoutedEventArgs e){IntPtr a = new System.Window…

[Vite] 性能优化

关于HTTP: https://www.cnblogs.com/Answer1215/p/18729206 DNS 打包方式:所有代码(包括 lodash-es、element-ui 等)被打包到一起,部署时只需请求一个或几个大文件。 优点是简单,不需要额外的网络请求;缺点是文件体积大,首次加载延迟较高,而且用户如果之前访问过其他…