博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net core发布到Caddy获取用户的真实ip

Posted on 2025-03-30 18:24  火冰·瓶  阅读(60)  评论(0)    收藏  举报

在 ASP.NET Core 部署到 Caddy 的场景中,获取用户的真实 IP 地址需要处理代理服务器(如 Caddy)传递的 X-Forwarded-For 或类似的头部信息。以下是实现步骤:

1. 配置 Caddy

确保 Caddy 正确地将客户端的真实 IP 地址传递给后端服务器。可以在 Caddyfile (默认路径:/etc/caddy/Caddyfile)中添加以下配置:

ttt.yuming.com {
	# Set this path to your site's directory.
	root * /root/wwwroot/ttt.yuming.com

	# Enable the static file server.
	file_server

	# Another common task is to set up a reverse proxy:
	reverse_proxy http://localhost:50051  {
		header_up X-Forwarded-For {remote_host}   #传递真实IP给后端服务器
		header_up X-Forwarded-Proto {scheme}       #传递真实协议给后端服务器
		
	}
	encode zstd gzip     #启用zstd和gzip压缩
}

  

这会将客户端的真实 IP 地址通过 X-Forwarded-For 头部传递给 ASP.NET Core 应用。

 

2. 安装 ASP.NET Core 的依赖包

在 ASP.NET Core 中,使用 Microsoft.AspNetCore.HttpOverrides 包来处理代理头部。如果项目中尚未安装,请添加:

dotnet add package Microsoft.AspNetCore.HttpOverrides
或使用PM控制台
Install-Package Microsoft.AspNetCore.HttpOverrides

  

3. 配置 ASP.NET Core 应用

Program.csStartup.cs 中,启用 ForwardedHeadersMiddleware 来处理代理头部:

using Microsoft.AspNetCore.HttpOverrides;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 配置 Forwarded Headers 中间件
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

 

4. 获取真实 IP 地址

在控制器或其他地方,可以通过以下代码获取用户的真实 IP 地址:

var clientIp = HttpContext.Connection.RemoteIpAddress?.ToString();

如果启用了 ForwardedHeadersMiddlewareRemoteIpAddress 会返回 X-Forwarded-For 中的真实 IP

 

注意事项

  1. 信任代理:默认情况下,ASP.NET Core 只信任本地代理。如果 Caddy 不在本地运行,需要显式信任代理 IP 地址:

  2. 安全性:确保只信任可信的代理服务器,以防止伪造的 X-Forwarded-For 头部。
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    KnownProxies = { IPAddress.Parse("Caddy服务器的IP地址") }
});