Skip to content
Blog cá nhân của PhongTV

Blog cá nhân của PhongTV

  • Home
  • About
  • Skills
  • Resume
  • Contact
  • Bài viết

[.Net Core] Lấy địa chỉ IP máy khách khi API được đặt sau Reserve Proxy

pbk16 Tháng 12, 2022 No Comments

Ta đã biết cách lấy địa chỉ IP của client bằng Request.HttpContext.Connection.RemoteIpAddress.

Nhưng nếu API của chúng ta đặt sau một proxy như Nginx hay IIS thì kết quả trả về lại là 127.0.0.1 hoặc ::1, do nó lấy địa chỉ của con proxy thay vì địa chỉ thực sự.

Địa chỉ đúng lúc này nằm trong request header với key là X-Forwarded-For.

Ta cần forward header này để API nhận diện được IP thực bằng cách thêm đoạn sau vào Startup.cs hoặc Program.cs (tuỳ theo style có tách riêng file Startup.cs hay không):

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
	ForwardedHeaders = ForwardedHeaders.All, //forward toàn bộ header, mặc định là None nên không forward cái gì cả
	ForwardLimit = null, // bỏ giới hạn mặc định chỉ forward 1 thằng duy nhất
	KnownNetworks = {
		new IPNetwork(IPAddress.Parse("192.168.1.0"), 24) // đây là dải IP trong mạng LAN, nếu thiếu khai báo này sẽ bị trả về IP của gateway (x.x.x.1) thay vì IP client
	}
});

Ngoài ra, nếu dùng Nginx thì cần bổ sung 1 số directive khi làm việc với proxy_pass

location /api {
	proxy_pass http://192.168.1.x/; // đừng quên ký tự / cuối cùng, nếu không file js trả về sẽ bị set thuộc tính ContentType là text/html thay vì text/javascript
    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; // forward IP ở đây nè
  	proxy_set_header   X-Forwarded-Proto $scheme;
}

Điều hướng bài viết

Previous: Nâng cấp PostgreSQL từ phiên bản 14 lên 15 trên Windows
Next: Lưu ý khi mở port cho VPN trên Xiaomi AX3000 CR8806

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Proudly powered by WordPress | Theme: Smart Portfolio by Code Work Web.
Contact Us

    This form is powered by: Sticky Floating Forms Lite