Lỗi 404 not found nginx khi chuyển sang centos 7 năm 2024

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.

Lỗi 404 not found nginx khi chuyển sang centos 7 năm 2024
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,

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

3 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 -L http://localhost/old.html

4 đúng cách chưa. Bạn không cần chỉ định

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

5 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.

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:

Bạn hãy thử truy cập một file không tồn tại trong

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

6, ví dụ như

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

7.

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.



    
        The page is not found
. . .

Hiện tại bạn đang sử dụng một trang web ảo, nhưng nếu

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

7 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

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

9 để 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



    
        The page is not found
. . .

0 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



    
        The page is not found
. . .

1 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



    
        The page is not found
. . .

1 block và một phần bên trong



    
        The page is not found
. . .

1 block đó.

Phần trước



    
        The page is not found
. . .

1 block là một block



    
        The page is not found
. . .

5 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



    
        The page is not found
. . .

1 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



    
        The page is not found
. . .

7 lấy nội dung của biến hệ thống



    
        The page is not found
. . .

8, 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



    
        The page is not found
. . .

9 trong



    
        The page is not found
. . .

5 block được hiểu là nếu giá trị của



    
        The page is not found
. . .

8 là

sudo vi /etc/nginx/nginx.conf

2, thì

sudo vi /etc/nginx/nginx.conf

3 sẽ được thay đổi thành

sudo vi /etc/nginx/nginx.conf

4. 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

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

9 bên trong



    
        The page is not found
. . .

1 block, bạn kiểm tra xem giá trị của biến

sudo vi /etc/nginx/nginx.conf

3 đã đượ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

sudo vi /etc/nginx/nginx.conf

8. Từ khóa

sudo vi /etc/nginx/nginx.conf

9 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.

Đ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



    
        The page is not found
. . .

1 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



    
        The page is not found
. . .

1 block và một phần bên trong



    
        The page is not found
. . .

1 block.

Phần trước



    
        The page is not found
. . .

1 block là một



    
        The page is not found
. . .

5 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



    
        The page is not found
. . .

1 block sẽ từ chối việc truy cập vào trang web nếu kết quả



    
        The page is not found
. . .

5 cho thấy như này.

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

1

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

Ở đây sử dụng

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

7 và

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

8 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



    
        The page is not found
. . .

5 block này, biến

. . .
# 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;
    }
. . .

0 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

. . .
# 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;
    }
. . .

1; nếu biến

. . .
# 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;
    }
. . .

2 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

. . .
# 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;
    }
. . .

0 là

. . .
# 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;
    }
. . .

1, 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.

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

2

Nếu bạn không thêm quốc gia của mình vào whitelist, khi truy cập vào

. . .
# 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;
    }
. . .

5, 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: [email protected].

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.