NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
12/06/2023
Lượt xem

Hướng dẫn sử dụng map module của Nginx trên CentOS 7

12/06/2023
14 phút đọc
Lượt xem

Đánh giá

5/5 - (131 bình chọn)

Map module của Nginx cho phép bạn ánh xạ các giá trị và biến, điều này giúp nó trở thành một công cụ cần thiết cho quản trị viên của các web servers, những người đang tìm cách để tối ưu hóa hiệu suất cho máy chủ của họ. Trong bài viết này Vietnix sẽ giúp bạn hiểu về cách sử dụng map module của Nginx trên CentOS 7.

Giới thiệu về cách sử dụng map module của Nginx trên CentOS 7

Khi cấu hình server cho website, người dùng sẽ gặp một vài hành động có điều kiện khá phổ biến cần thực hiện. Ví dụ, sẽ có một vài file được trình duyệt người dùng lưu vào cache lâu hơn các file khác, hoặc là một vài phần của trang web chỉ được phép truy cập qua các kết nối an toàn (như yêu cầu username và password) trong khi các phần khác thì không yêu cầu.

Tìm hiểu về cách sử dụng map module của Nginx trên CentOS 7
Tìm hiểu về cách sử dụng map module của Nginx trên CentOS 7

Map module của Nginx cho phép bạn tạo các biến có điều kiện trong file cấu hình của Nginx. Điều này nghĩa là, chúng sẽ phụ thuộc vào giá trị của các biến khác.

Bước 1 – Tạo và kiểm tra một trang web thử nghiệm

Trước khi thực hiện theo bài hướng dẫn này, cần đảm bảo rằng bạn đã có một máy chủ CentOS 7 và một tài khoản sudo non-root. Bên cạnh đó cũng đã cài sẵn Nginx trên máy chủ này (Hướng dẫn chi tiết tại đây).


Nếu bạn đang tìm kiếm giải pháp máy chủ để tiết kiệm chi phí và nâng cao hiệu suất công việc, thì hãy xem xét sử dụng dịch vụ thuê máy chủ ảo (VPS) của Vietnix. Tại đây, Vietnix cung cấp nhiều loại dịch vụ khác nhau để phù hợp với nhu cầu của khách hàng như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe và VPS GPU với cấu hình và mức giá linh hoạt.

Ngoài ra, Vietnix luôn cập nhật và đầu tư vào những công nghệ mới nhất để đáp ứng nhu cầu của khách hàng. Vietnix cũng cung cấp hỗ trợ kỹ thuật 247 nhanh chóng và chuyên nghiệp, giúp khách hàng giải quyết các vấn đề liên quan đến dịch vụ đang sử dụng. Liên hệ với Vietnix để được tư vấn các gói dịch vụ chi tiết.

Đầu tiên, hãy tạo một trang, index.html trong thư mục trang web mặc định của Nginx. File này hoàn toàn là văn bản và sẽ mô tả về nội dung bên trong trang Home.

sudo sh -c 'echo "Home" > /usr/share/nginx/html/index.html'

Khi đã có file test này, bạn sẽ kiểm tra xem nó có được phục vụ bằng curl đúng cách chưa. Bạn không cần chỉ định index.html cho lệnh này. Bởi vì, file đó sẽ mặc định phục vụ khi không cung cấp tên file chính xác.

curl http://localhost/

Nó sẽ cho bạn thấy một từ duy nhất là “Home” giống như phản hồi dưới đây:

Home

Bạn hãy thử truy cập một file không tồn tại trong /usr/share/nginx/html, ví dụ như old.html.

curl -L http://localhost/old.html

Phản hồi sẽ là một thông báo lỗi hệ thống, 404 Not Found, có nghĩa là trang không tồn tại.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>The page is not found</title>
. . .
</html>

Hiện tại bạn đang sử dụng một trang web ảo, nhưng nếu old.html là một trang web từng tồn tại và đã bị xóa thì việc trả lại lỗi 404 nghĩa là tất cả các liên kết đến trang đó đều bị hỏng. Những liên kết đó có thể đã được Google lập chỉ mục, được in ra hoặc ghi lại, hoặc được chia sẻ bằng bất kỳ cách nào khác.

Bạn sẽ sử dụng map module để đảm bảo địa chỉ cũ này sẽ hoạt động lại bằng cách tự động chuyển hướng người xem đến các bản thay thế mới.

Bước 2 – Cấu hình redirects

Đối với các trang web nhỏ, bạn có thể sử dụng if để chuyển hướng và thực hiện các tính năng tương tự. Tuy nhiên, cấu hình này không dễ bảo trì hoặc mở rộng trong tương lai khi danh sách các điều kiện có thể dài hơn.

Map module là một giải pháp thuận tiện, hữu ích hơn. Nó cho phép bạn so sánh giá trị biến Nginx với danh sách các điều kiện, sau đó liên kết một giá trị mới với biến dựa trên sự ăn khớp. Trong ví dụ này, bạn sẽ so sánh URL được yêu cầu với danh sách các trang cũ, muốn chuyển hướng đến các trang mới tương ứng. Đối với mỗi địa chỉ cũ, bạn sẽ liên kết với địa chỉ mới.

Map module là một module cốt lõi của Nginx, điều này có nghĩa là nó không cần phải được cài đặt riêng để sử dụng. Để tạo map module và chuyển hướng cần thiết, hãy mở file cấu hình server block mặc định của Nginx trong vi hoặc trình chỉnh sửa văn bản yêu thích của bạn:

sudo vi /etc/nginx/nginx.conf

Tìm cấu hình server block, có dạng như sau:

. . .

server {
    listen 80 default_server;
    listen [::]:80 default_server;

. . .

Bạn sẽ thêm hai phần mới: Một phần trước server block và một phần bên trong server block đó.

Phần trước server block là một block map mới giúp ánh xạ các URL cũ và URL mới bằng cách sử dụng map module. Phần bên trong server block chính là phần redirect.

. . .

# Old website redirect map
#
map $uri $new_uri {
    /old.html /index.html;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    # Old website redirect
    if ($new_uri) {
        rewrite ^ $new_uri permanent;
    }
. . .

Directive map $uri $new_uri lấy nội dung của biến hệ thống $uri, nơi chứa địa chỉ URL của trang yêu cầu và sau đó so sánh lại với danh sách các điều kiện trong dấu ngoặc {}. Mỗi mục thuộc danh sách này sẽ có 2 phần: Giá trị để so sánh và giá trị mới để gán vào biến nếu điều này phù hợp.

Dòng /old.html /index.html trong map block được hiểu là nếu giá trị của $uri/old.html, thì $new_uri sẽ được thay đổi thành /index.html. Nếu không khớp sẽ giữ nguyên. Ở đây, bạn sẽ chỉ định một điều kiện nhưng có thể định nghĩa bao nhiêu điều kiện tùy thích trong một map.

Sau đó, bằng cách sử dụng câu lệnh điều kiện if bên trong server block, bạn kiểm tra xem giá trị của biến $new_uri đã được thiết lập hay chưa. Nếu có, điều đó có nghĩa là điều kiện trong map đã được thỏa mãn và bạn nên chuyển hướng sang trang web mới bằng lệnh rewrite. Từ khóa permanent cho thấy rằng chuyển hướng sẽ là HTTP 301 Moved Permanently, có nghĩa là địa chỉ cũ không còn hợp lệ và sẽ không quay trở lại trực tuyến.

Lưu và đóng file để thoát.

Để kích hoạt cấu hình mới, khởi động lại Nginx.

curl -L http://localhost/old.html

Lần này sẽ không có lỗi 404 Not Found trong output. Thay vào đó, bạn sẽ thấy trang chủ Home mà bạn đã tạo trong Bước 1.

Home

Điều này có nghĩa là map đã được cấu hình đúng và bạn có thể sử dụng nó để chuyển hướng URL bằng cách thêm nhiều mục vào map.

Chuyển hướng URL là một tiện ích của map module. Một tiện ích khác là lọc lưu lượng dựa trên vị trí địa lý của khách truy cập.

Bước 3 – Giới hạn truy cập website theo quốc gia

Đôi khi, một server có thể nhận được lượng yêu cầu tự động quá nhiều. Điều này có thể là một cuộc tấn công DDoS, mục đích của việc này để hack được mật khẩu nhằm truy cập bảng điều khiển quản trị website hoặc khai thác các lỗ hổng trong phần mềm để tấn công website và sử dụng nó để gửi thư rác hoặc sửa nội dung trang web.

Những cuộc tấn công này có thể đến từ nhiều servers phân tán ở nhiều quốc gia khác nhau khiến việc ngăn chặn chúng trở nên khó khăn. Một giải pháp để giảm thiểu tác động của một cuộc tấn công như thế này là tạo một whitelist các quốc gia có thể truy cập vào trang web.

Đây không phải là một giải pháp hoàn hảo nhưng là một lựa chọn hợp lý và không giới hạn đối tượng khách truy cập của trang web. Đồng thời nó có thể được thực hiện nhanh chóng và ít bị lỗi hơn.

Việc lọc ở cấp độ server nhanh hơn so với lọc ở cấp độ trang web và cũng bao gồm tất cả các yêu cầu (như file tĩnh, hình ảnh). Loại lọc này cũng ngăn chặn các yêu cầu đến phần mềm trang web và khiến việc khai thác các lỗ hổng khó hơn.

Để sử dụng bộ lọc địa lý, hãy trước tiên tạo một file cấu hình mới:

sudo vi /etc/nginx/conf.d/geoip.conf

Hãy dán nội dung sau vào file. Điều này cho Nginx biết nơi tìm cơ sở dữ liệu GeoIP chứa mapping giữa địa chỉ IP của khách truy cập và quốc gia tương ứng của họ. Cơ sở dữ liệu này đã được cài đặt sẵn trên Ubuntu 16.04.

# GeoIP database path
#

geoip_country /usr/share/GeoIP/GeoIP.dat;

Bước tiếp theo là tạo map và cấu hình hạn chế cần thiết. Mở cấu hình server block mặc định của Nginx:

sudo vi /etc/nginx/nginx.conf

Sau khi thực hiện các bước 1 và 2, cấu hình server block sẽ có dạng như sau:

. . .

# Old website redirect map
#
map $uri $new_uri {
    /old.html /index.html;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    # Old website redirect
    if ($new_uri) {
        rewrite ^ $new_uri permanent;
    }
. . .

Bạn sẽ thêm hai phần mới: Một phía trước server block và một phần bên trong server block.

Phần trước server block là một map block mới giúp xác định hành động mặc định (không cho phép truy cập) cũng như danh sách các mã quốc gia được phép truy cập vào trang web. Phần bên trong server block sẽ từ chối việc truy cập vào trang web nếu kết quả map cho thấy như này.

 . . .

# Allowed countries
#
map $geoip_country_code $allowed_country {
    default no;
    country_code_1 yes;
    country_code_2 yes;
}

# Old website redirect map
#
map $uri $new_uri {
    /old.html /index.html;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;

	# Disallow access based on GeoIP
	if ($allowed_country = no) {
        return 444;
    }

    # Old website redirect
    if ($new_uri) {
        rewrite ^ $new_uri permanent;
    }
. . .

Lưu và đóng file để thoát.

Ở đây sử dụng country_code_1country_code_2 như là các biến đại diện. Thay thế những biến này bằng mã quốc gia của bạn với hai ký tự hoặc các quốc gia muốn cho vào whitelist. Ví dụ, mã hai ký tự cho Việt Nam là vn.

Khác với ví dụ đầu tiên, trong map block này, biến $allowed_country sẽ luôn được thiết lập thành một giá trị nào đó. Theo mặc định, nó được đặt thành no; nếu biến $geoip_country_code khớp với một trong các mã quốc gia trong block, nó sẽ được đặt thành yes. Nếu biến $allowed_countryno, nó sẽ thông báo 444 Connection Closed Without Response thay vì phục vụ trang web thực tế.

Để kích hoạt cấu hình mới, hãy khởi động lại Nginx.

sudo systemctl restart nginx

Nếu bạn không thêm quốc gia của mình vào whitelist, khi truy cập vào http://your_server_ip, bạn sẽ thấy một thông báo lỗi như The page isn’t working hay The page didn’t send any data. Nếu đã thêm quốc gia của mình vào whitelist, bạn sẽ nhìn thấy Home như trước đó.

Ngoài ra, một giải pháp khác giúp chống tấn công DDoS hiệu quả là sử dụng VPS kết hợp Firewall anti DDoS của Vietnix. Đây là công nghệ độc quyền được Vietnix phát triển và hoàn thiện, nâng cấp trong hơn 11 năm hoạt động.

Hiện tại, Vietnix đang là một trong những nhà cung cấp đáng tin cậy của hơn 50.000 khách hàng cá nhân và doanh nghiệp, bao gồm cả GTV, UB Group, SEOSONA, SAGO Media,… và đã kích hoạt hơn 100.000 dịch vụ. Đặc biệt, 97% khách hàng của Vietnix đã giới thiệu dịch vụ này cho người khác sau khi sử dụng. Đây là con số ấn tượng thể hiện chất lượng dịch vụ của Vietnix. Đừng ngại liên hệ với Vietnix để biết thêm thông tin chi tiết về các giải pháp lưu trữ và nhận được sự hỗ trợ tốt nhất.

Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
  • Hotline: 1800 1093.
  • Email: sales@vietnix.com.vn.

Lời kết

Như vậy với những thông tin trong bài viết này, bạn đã hiểu được cách sử dụng map module và cơ chế sử dụng của nó ở một số trường hợp khác nhau. Map module không chỉ cung cấp phép so sánh đơn giản, mà còn hỗ trợ biểu thức chính quy cho phép so sánh phức tạp hơn. Đây là một cách tuyệt vời giúp các file cấu hình gọn nhẹ hơn nếu phải đánh giá nhiều điều kiện.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Banner group
Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

Black Friday Hosting & VPS

Chương trình bắt đầu sau

Giảm giá 40% hosting VPS

50 coupon mỗi ngày

Gia hạn giá không đổi

NHẬN DEAL NGAY
Pattern

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG