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 và khởi động lại nginx
nginx -t service nginx restart
Bây giờ bạn có thể VPN sang vùng mà bạn chặn và truy cập web để kiểm tra nhé. Chúc bạn thành công.