国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Nginx+Docker部署模式下 asp.net core 獲取真實(shí)的客戶(hù)端ip

ermaoL / 3541人閱讀

摘要:結(jié)論使用獲取客戶(hù)端不會(huì)自動(dòng)取中的值需求多帶帶處理。參考資料負(fù)載均衡的場(chǎng)景下如何獲取客戶(hù)端地址

[toc]

場(chǎng)景

線上環(huán)境使用Nginx(安裝在宿主機(jī))+Docker進(jìn)行部署,應(yīng)用獲取客戶(hù)端ip地址不正確,獲取客戶(hù)端IP的代碼為Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4()

過(guò)程還原 搭建一個(gè)webapi示例環(huán)境

創(chuàng)建一個(gè)新項(xiàng)目

dotnet new webapi -o getRealClientIp

修改模板中的ValuesControllerGet方法

// GET api/values
[HttpGet]
public ActionResult Get()
{
   return this.Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
}
容器相關(guān)配置

docker-compose.yml

version: "2"
services:
    web:
      image: microsoft/dotnet:2.1-aspnetcore-runtime
      volumes:
        - ./publish:/app #站點(diǎn)文件
      command: dotnet /app/getRealClientIp.dll
      ports:
          - "5000:80"
      networks:
          test:
              ipv4_address: 172.200.0.101
    nginx:
      image: nginx
      networks:
          test:
              ipv4_address: 172.200.0.102
      volumes:
        - ./nginx.conf:/etc/nginx/nginx.conf:ro # nginx配置文件
      ports:
          - "5001:80"
networks:
   test:
      ipam:
         config:
         - subnet: 172.200.0.0/16
           gateway: 172.200.0.1

nginx.conf

http {
    server {
        listen 80;
        access_log off;
        location / {
            proxy_pass http://172.200.0.101:80;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Via "nginx";
        }
    }
}
events {
  worker_connections  1024;
}
運(yùn)行查看效果
運(yùn)行
dotnet publish -c Release -o ./publish #編譯
docker-compose up #運(yùn)行容器
直接訪問(wèn)站點(diǎn)
curl http://localhost:5000/api/values
172.200.0.1

返回的ip地址172.200.0.1是配置的容器的網(wǎng)關(guān)地址,能獲取到正確的ip

訪問(wèn)通過(guò)nginx代理的地址
curl http://localhost:5001/api/values
172.200.0.102

返回的ip地址172.200.0.102是nginx容器的地址,沒(méi)有獲取到正確的ip
上面的nginx配置已經(jīng)相關(guān)的轉(zhuǎn)發(fā)參數(shù),并且該參數(shù)配置之前能正常運(yùn)行在php的環(huán)境;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

推斷必須修改 asp.net core 相關(guān)代碼,才能獲取到真實(shí)的客戶(hù)端ip地址,一番google之后,

修改代碼如下
// GET api/values
[HttpGet]
public ActionResult Get()
{
    var ip = this.Request.Headers["X-Forwarded-For"].FirstOrDefault();
    if (string.IsNullOrEmpty(ip))
    {
        ip = this.Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
    }
    return ip;
}

重新編譯運(yùn)行

dotnet publish -c Release -o ./publish #編譯
docker-compose up #運(yùn)行容器

curl http://localhost:5001/api/values
172.200.0.1

curl http://localhost:5000/api/values
172.200.0.1

直接訪問(wèn)和通過(guò)nginx代理訪問(wèn)返回的ip地址均為172.200.0.1,獲取正確。

結(jié)論

asp.net core 使用 Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4()獲取客戶(hù)端ip,不會(huì)自動(dòng)取Header中X-Forwarded-For的值,需求多帶帶處理。

參考資料

負(fù)載均衡的場(chǎng)景下ASP.NET Core如何獲取客戶(hù)端IP地址

How do I get client IP address in ASP.NET CORE?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/27824.html

相關(guān)文章

  • Nginx+Docker部署模式 asp.net core 獲取真實(shí)戶(hù)端ip

    摘要:結(jié)論使用獲取客戶(hù)端不會(huì)自動(dòng)取中的值需求單獨(dú)處理。參考資料負(fù)載均衡的場(chǎng)景下如何獲取客戶(hù)端地址 [toc] 場(chǎng)景 線上環(huán)境使用Nginx(安裝在宿主機(jī))+Docker進(jìn)行部署,應(yīng)用獲取客戶(hù)端ip地址不正確,獲取客戶(hù)端IP的代碼為Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4() 過(guò)程還原 搭建一個(gè)webapi示例環(huán)境 創(chuàng)建一...

    Kyxy 評(píng)論0 收藏0
  • .NET Core+MySql+Nginx 容器化部署

    摘要:容器化容器化之多容器應(yīng)用部署容器化部署引言上兩節(jié)我們通過(guò)簡(jiǎn)單的學(xué)習(xí)了的基本操作。基于當(dāng)前項(xiàng)目構(gòu)建的容器服務(wù),依賴(lài)于服務(wù)。最后,使用綜合完成了容器化部署。參考資料容器化容器化之多容器應(yīng)用部署 showImg(https://segmentfault.com/img/remote/1460000012801559); .NET Core容器化@Docker.NET Core容器化之多容器...

    ybak 評(píng)論0 收藏0
  • .NET Core+MySql+Nginx 容器化部署

    摘要:容器化容器化之多容器應(yīng)用部署容器化部署引言上兩節(jié)我們通過(guò)簡(jiǎn)單的學(xué)習(xí)了的基本操作。基于當(dāng)前項(xiàng)目構(gòu)建的容器服務(wù),依賴(lài)于服務(wù)。最后,使用綜合完成了容器化部署。參考資料容器化容器化之多容器應(yīng)用部署 showImg(https://segmentfault.com/img/remote/1460000012801559); .NET Core容器化@Docker.NET Core容器化之多容器...

    jerry 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<