Hướng dẫn Block Country trên Nginx miễn phí
UnITo chia sẻ lại các bước cấu hình Nginx để chặn truy cập từ một quốc gia nào đó hoàn toàn miễn phí dùng GeoIP module.

Block country trên Nginx miễn phí
Cách này sẽ sử dụng cơ sở dữ liệu IP của MaxMind GeoIP để xác định quốc gia của khách truy cập. Yêu cầu Nginx phải được kích hoạt module nginx-module-geoip thì mới dùng được.
Trong bài mình sử dụng CentOS 7, phiên bản CentOS khác hoặc hệ điều hành khác thao tác cũng tương tự.
Cài đặt Nginx với GeoIP module
Nginx kể từ phiên bản v. 1.9.11 đã hỗ trợ dynamic module nên chúng ta không còn phải compile lại Nginx từ đầu như trước nữa.
– Đảm bảo server kích hoạt EPEL và Nginx repository.
– Cài đặt nginx-module-geoip
yum install nginx-module-geoip
– Thêm dòng sau vào đoạn đầu file /etc/nginx/nginx.conf
load_module "modules/ngx_http_geoip_module.so";
– Kiểm tra Nginx và khởi động lại nếu không có vấn đề gì:
nginx -t service nginx restart
Lấy dữ liệu GeoLite2
– Đăng ký tài khoản MaxMind miễn phí: https://www.maxmind.com/en/geolite2/signup
– Đặt mật khẩu cho tài khoản rồi lấy AccountID và LicenseKey, chọn versions older than 3.1.1.
– Cập nhật thông tin AccountID và LicenseKey trong file /etc/GeoIP.conf
– Cập nhật cơ sở dữ liệu IP GeoLite2 với lệnh:
geoipupdate
Có thể phải chờ 5 – 10 phút mới chạy được lệnh trên. Nếu như không có output nào xuất hiện tức là bạn đã cập nhật xong, dữ liệu sẽ lưu trong thư mục /usr/share/GeoIP/
Khi cần cài đặt trên server khác bạn chỉ cần copy lại AccountID và LicenseKey là được.
Cấu hình Nginx dùng GeoIP
Chỉnh sửa nội dung file /etc/nginx/nginx.conf
, thêm đoạn sau vào block http {}
, trước tất cả các dòng include:
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default yes; RU no; AO no; }
Ý nghĩa đoạn code ví dụ trên là cho phép tất cả các nước truy cập, loại trừ Russia và Angola. Xem thêm danh sách country code.
Tiếp theo, chỉnh file cấu hình tên miền muốn chặn để sử dụng biến $allowed_country
đã map, nên sử dụng ngay sau dòng server_name
. Đoạn code chặn như sau:
if ($allowed_country = no) { return 444; }
Kiểm tra Nginx và khởi động lại nếu không có vấn đề gì:
nginx -t service nginx restart
Giờ test thử nếu thành công bạn sẽ thấy thông báo chặn truy cập như sau:

Hướng dẫn Block Country trên Nginx miễn phí
Chúc bạn thành công.
CÔNG TY CỔ PHẦN UNITO
Địa chỉ: Số 47 Đường số 28, Phường An Phú, Thành phố Thủ Đức, Hồ Chí Minh, Việt Nam.
Phone: 028 7777 5557
Email: info@unito.com.vn | xuan.nguyen@unito.com.vn
Website: https://unito.com.vn/
Facebook: https://www.facebook.com/unito.jsc
Youtube: https://www.youtube.com/UnITo-JSC
Twitter: https://twitter.com/UnitoJSC
Pinterest: https://www.pinterest.com/UnITo_JSC/
Nhận xét
Đăng nhận xét