.NetCore8.0--[托管和部署]01代理和负载均衡配置
Table of contents
参考链接:
https://learn.microsoft.com/zh-cn/aspnet/core/host-and-deploy/proxy-load-balancer
https://www.nginx.com/resources/wiki/start/topics/examples/forwarded/
Net Core Header 转接头替换方案
nginx等代理服务器在转发时,会使用X-Forwarded-For 请求头。该请求头会记录从请求者ip到层层代理服务器ip的信息。
asp.net core 在使用转发服务器后,官方文档说需要使用中间件设置XForwardedFor与XForwardedProto
https://learn.microsoft.com/zh-cn/aspnet/core/host-and-deploy/proxy-load-balancer
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();
使用X-Forwarded-For
会更新 HttpContext.Connection.RemoteIpAddress
使用X-Forwarded-Proto
会更新 HttpContext.Request.Scheme
使用X-Forwarded-Host
会更新 HttpContext.Request.Host
此配置只对Nginx与项目同时部署在同一台server(本机localhost)时有效,多台server需在项目中配置代理的IP地址才能有效的替换转接头信息,代码如下:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
KnownProxies = { IPAddress.Parse("172.17.0.0") }
});
也可通过KnownNetworks属性配置代理地址范围。
附nginx 配置
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}