Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip

本文介绍了在Nginx+Docker部署模式下,由于网络配置导致asp.net core应用无法正确获取客户端IP的问题。通过分析过程,发现需要修改asp.net core代码来读取HTTP头部的X-Forwarded-For字段,以获取真实IP。最终,通过调整代码后,无论是直接访问还是通过Nginx代理,都能正确获取客户端IP。
摘要由CSDN通过智能技术生成

场景

线上环境使用Nginx(安装在宿主机)+Docker进行部署,应用获取客户端ip地址不正确,获取客户端IP的代码为Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4()

过程还原

搭建一个webapi示例环境

创建一个新项目

dotnet new webapi -o getRealClientIp

修改模板中的ValuesControllerGet方法

// GET api/values
[HttpGet]
public ActionResult<string> Get()
{
   return this.Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
}
容器相关配置

docker-compose.yml

version: '2'
services:
    web:
      image: microsoft/dotnet:2.1-aspnetcore-runtime
      volumes:
        - ./publish:/app #站点文件
      command: dotnet /app/getRealClientIp.dll
      ports:
          - "5000:80"
      networks:
          test:
              ipv4_address: 172.200.0.101
    nginx:
      image: nginx
     
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值