如何获取前端请求的真实IP/项目启动端口号

本文探讨了前端如何通过请求体传递客户端IP到后端,后端利用Django处理多级代理情况,获取准确的客户端IP。重点讲解了nginx配置和后端代码实现,以及如何在实际场景中测试和处理代理IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1: 前端获取客户端IP,然后通过请求体等方式传给后端

{
	"user_name": "xiaoxiao",
	"password": "admin",
	"ip": "xx.xx.xx.xx"
}

2: 后端自行获取请求头中IP

# 以django为例
if request.META.get('HTTP_X_FORWARDED_FOR'):
    ip = request.META.get('HTTP_X_FORWARDED_FOR')
else:
    ip = request.META.get('REMOTE_ADDR')
# 当有多级代理时,HTTP_X_FORWARDED_FOR返回多个IP,取第一个即可。
if ip:
    ip = request.split(',')[0]
参数: REMOTE_ADDR
REMOTE_ADDR 是最后向服务器发起请求的IP
参数: HTTP_X_FORWARDED_FOR(需要设置nginx, 否则请求头没有该参数)
此次向服务器发起请求的
01-客户端ip
02-代理ip(但是没有最后1个代理ip, 最后一个代理ip在REMOTE_ADDR中),  
使用逗号隔开 例如 "220.xx.xx.xx , 39.xx.xx.xx"
220.xx.xx.xx 是客户端的ip,   39.xx.xx.xx 是第一次代理ip,  第二次代理ip是REMOTE_ADDR 的值

客户端请求---->nginx路由配置(html.conf)----->前端页面----nginx路由配置(django.conf)–>后端接口

nginx配置: 在html.conf中添加
server{
            listen 80;

            location / {
                    root /var/www/apps/dist;	# 前端静态文件存放地址
                    error_page 404 /index.html;
                    add_header Access-Control-Allow-Origin *;
                    add_header Access-Control-Allow-Headers X-Requested-With ;
		            add_header Access-Control-Allow-Methods GET,POST,OPTIONS ;

            }
            location /api {
                    proxy_pass 127.0.0.1:8080/; 	# 指向后台nginx监听django的端口
                    
                    # 新增三行代码 
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            }

}

3-测试

后台代码

# 任一一个中间件或者接口中添加代码
...
	def process_request(self, request):
		request_ip1 = request.META.get("HTTP_X_FORWARDED_FOR", "") 
		request_ip2 = request.META.get("REMOTE_ADDR", "")
		with open("header_info.txt", 'a') as f:
		    f.write('HTTP_X_FORWARDED_FOR: %s, REMOTE_ADDR:%s \r\n' % (request_ip1, request_ip2))
		... 
...

测试

客户端通过页面正常访问接口:
在这里插入图片描述
221 是客户端的ip, 39是代理的ip

postman直接访问django后台
在这里插入图片描述
没有代理, 直接拿到221

django项目获取端口号
例: 获取6062

在这里插入图片描述

pro_port = request.META['SERVER_PORT']
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值