使用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_namelocalhost;
location / {
root html;
indexindex.html index.htm;
}
# 添加返回文本格式的IP地址映射,返回请求方IP
location /http_ip {
default_type text/plain;
return 200 $remote_addr;
}
# 添加返回json格式的IP地址映射,返回请求方IP
location /http_json_ip {
default_type application/json;
return 200 "{\"ip\":\"$remote_addr\"}";
}
#error_page404 /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. 进行请求测试
[*] 文本格式:
https://img-blog.csdnimg.cn/direct/761ce4524a1d40b799a6f5833928ccd8.png
[*] JSON格式
https://img-blog.csdnimg.cn/direct/4a56af057252465e8bcea2c58dac0b63.png
2. 搭建https协议旁路服务器
2.1 生成https证书
[*] 下载openssl: openSSL下载地点
https://img-blog.csdnimg.cn/direct/6db558fc6a9041478268a818496bfd5a.png
[*] 安装openssl, 按照提示【下一步】就行
[*] 创建私钥,进入到安装目录的bin目录下,在此目录下打开CMD下令窗口,然后执行:
openssl genrsa -des3 -out nginx-https.key 1024
执行过程中必要设置暗码,任意设置一个就行:
https://img-blog.csdnimg.cn/direct/22f87401e0b0400ba0d35928df7dbfa9.png
执行完成以后,会生成私钥文件:
https://img-blog.csdnimg.cn/direct/7b155d11a90149358b433071c407ba16.png
[*] 为了后续启动nginx不输入暗码,可以多做一步删除暗码的操作,在CMD窗口执行:
openssl rsa -in nginx-https.key -out nginx-https.key.unsecure
[*] 创建 csr 证书
同样在openssl安装bin目录下,在CMD窗口执行:
openssl req -new -key nginx-https.key.unsecure -out nginx-https.csr
执行过程中必要输入一些信息,任意输入就行,最后会生成一个csr文件。
[*] 生成crt证书:
openssl x509 -req -days 365 -in nginx-https.csr -signkey nginx-https.key.unsecure -out nginx-https.crt
[*] 最终生成文件:
https://img-blog.csdnimg.cn/direct/ef63da58333a49869aedc2cf21083697.png
2.2 修改nginx启动设置
# HTTPS server
server {
listen 443 ssl;
server_namelocalhost;
# 这个是证书的crt文件所在目录
ssl_certificate D:/devTools/openssl/service/bin/nginx-https.crt;
# 这个是证书key文件所在目录
ssl_certificate_keyD:/devTools/openssl/service/bin/nginx-https.key.unsecure;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout5m;
ssl_ciphersHIGH:!aNULL:!MD5;
ssl_prefer_server_cipherson;
location / {
root html;
indexindex.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 进行请求测试
[*] 文本格式
https://img-blog.csdnimg.cn/direct/a37b750c45f24ce3a03b35ee7c34cab4.png
[*] JSON格式
https://img-blog.csdnimg.cn/direct/7eed2465150e44d3a928a5ff8e8b2554.png
到此使用Nginx搭建旁路服务器就完成了。
三、注意
使用Nginx搭建旁路服务器虽然可以获取到客户端真实的IP,但是有一个题目,通信过程中请求头可能被第三方窜改,导致获取IP也并非真实IP,这个必要特殊留意。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]