Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法

 

1、获取客户端IP地址实现方法(扩展类)

 1 using Microsoft.AspNetCore.Http;
2 using Microsoft.AspNetCore.Mvc.ModelBinding;
3 using System.Collections.Generic;
4 using System.Linq;
5
6 namespace WebApi.Controllers
7 {
8 /// <summary>
9 /// 扩展类
10 /// </summary>
11 public static class Extension
12 {
13 /// <summary>
14 /// 获取客户Ip
15 /// </summary>
16 /// <param name="context"></param>
17 /// <returns></returns>
18 public static string GetClientUserIp(this HttpContext context)
19 {
20 var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
21 if (string.IsNullOrEmpty(ip))
22 {
23 ip = context.Connection.RemoteIpAddress.ToString();
24 }
25 return ip;
26 }
27 }
28 }

调用该方法:

var ip = HttpContext.GetClientUserIp();

2、解决Asp.Net Core2.0发布到Ubuntu后不能正确获取客户IP解决办法

 1         /// <summary>
2 ///
3 /// </summary>
4 /// <param name="app"></param>
5 /// <param name="env"></param>
6 /// <param name="loggerFactory"></param>
7 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
8 {
9 #region 解决Ubuntu Nginx 代理不能获取IP问题
10 app.UseForwardedHeaders(new ForwardedHeadersOptions
11 {
12 ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
13 });
14 #endregion
15 }

本人站点用的是Nginx进行代理,而站点指向是本地Ip,不能正确获得客户的IP,这时就需要通过Nginx获取到的IP传递给站点

Nginx的配置

 1 server {
2 listen 80;
3 server_name www.xxx.com;
4 root /var/www/html;
5 index index.html index.htm index.nginx-debian.html;
6
7 location / {
8 proxy_pass http://localhost:5000;
9 proxy_http_version 1.1;
10 proxy_set_header Upgrade $http_upgrade;
11 proxy_set_header Connection keep-alive;
12 proxy_set_header Host $host;
13 proxy_set_header X-Real-IP $remote_addr;
14 proxy_cache_bypass $http_upgrade;
15 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
16 }
17 }

重启Nginx:

sudo service nginx restart;

最新文章

  1. 在 Windows Phone 中,为 Grid 添加 Tilt 效果
  2. 本博客现已迁移到chuxiuhong.com
  3. django多条件筛选搜索(项目实例)
  4. Java常用工具类题库
  5. jstl &lt;c:forEach&gt; 介绍
  6. std::function赋值的几种方法
  7. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
  8. Python小问题汇总
  9. YUM源、磁盘基础知识 CDN概念
  10. NodeJS初介
  11. 【网络】TCP/IP连接三次握手
  12. Vue组件的is具体用法
  13. python提示AttributeError: &#39;NoneType&#39; object has no attribute &#39;append&#39;【转发】
  14. SQL Server进阶 索引
  15. content字符生成配合CSS3 animation的点点点loading
  16. zookeeper(百度百科http://baike.baidu.com/view/3061646.htm?fr=aladdin)
  17. maven执行单元测试失败后,继续生成Jacoco&amp;Sonar报告
  18. 【leetcode】70-ClimbingStairs
  19. SpringBoot配置logback
  20. Lambda表达式学习(1)

热门文章

  1. Android apk动态加载机制
  2. SwipeRefreshLayout详解和自定义上拉加载更多
  3. TIMESTAMPN(N) WITH LOCAL TIMEZONE数据类型转换
  4. hashtable——散列表
  5. Winform中的TextBox的小技巧
  6. XmlDocument.Load(url) url是https远程时,报错&quot; 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。&quot; &quot;根据验证过程,远程证书无效。&quot;
  7. kindEditor 富文本编辑器 使用介绍
  8. Confluence 6 诊断
  9. LeetCode(105):从前序与中序遍历序列构造二叉树
  10. Pychram IDE链接MySQL下更新数据的问题总结