惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
D
Docker
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
B
Blog
Vercel News
Vercel News
Recent Announcements
Recent Announcements
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
宝玉的分享
宝玉的分享

博客园 - 火冰·瓶

Cloudflare Tunnel 有两种模式 用 Cloudflare Tunnel 实现从外网 SSH 登录内网服务器 Cloudflare + .NET Core MVC 部署完整流程 net core 后端获取网络图片的扩展名 推荐好用的web控件 ubuntu运维 使用Frp+Caddy把https映射到内网的web服务 net core中结合EntityFrameworkCore的DB first使用PostgreSQL OneDrive中设置不同步某个文件夹 Framework 4.7老项目运行到caddy Action<T> 和 Func<T>的用法 EF Core经验 net core随记 asp.net core 记录页面访问次数,同一个IP一个小时只算一次 asp.net core 记录页面访问记录 asp.net core 发布到caddy 统计文章阅读量,一小时内重复刷新的不重复统计 使用on()方法绑定事件,解决动态加载的元素事件绑定 鼠标悬停在图片上方时,显示文字
asp.net core发布到Caddy获取用户的真实ip
火冰·瓶 · 2025-03-30 · via 博客园 - 火冰·瓶

在 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地址") }
});