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í

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í

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.

Phone028 7777 5557

Emailinfo@unito.com.vn | xuan.nguyen@unito.com.vn

Websitehttps://unito.com.vn/

Facebookhttps://www.facebook.com/unito.jsc

Youtubehttps://www.youtube.com/UnITo-JSC

Twitterhttps://twitter.com/UnitoJSC

Pinteresthttps://www.pinterest.com/UnITo_JSC/

Nhận xét

Bài đăng phổ biến từ blog này

[VPS Free] Không Cần VISA Và Master Card

Lỗi Table Database Thiếu Primary Key Trên WordPress

Cài Đặt WP-CLI Để Quản Trị WordPress