關於.net core使用nginx做反向代理獲取客戶端ip的問題


1、正常情況下.net core獲取客戶端ip是比較簡單的

         /// <summary>
        /// 獲取客戶Ip
        /// </summary>
        /// <param name = "context" ></ param >
        /// < returns ></ returns >
        public static string GetClientUserIp(this HttpContext context)
        {
            var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
            if (string.IsNullOrEmpty(ip))
            {
                ip = context.Connection.RemoteIpAddress.ToString();
            }

            return ip;
        }    

  通過這樣一個方法就能獲取到客戶端ip。

2、但是,我在centos下使用nginx代理后,這樣指向的就是本地ip了,所以需要將nginx獲取到的ip傳遞到.net core web站點。

3、首先,我們需要在Startup.cs里添加

app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });

然后

server {
    listen 80;
    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;
    }
}

這是之前我的nginx配置。

需要再加上一行

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

最后重啟nginx,至此可以獲取到客戶端ip啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM