Reading Time: 9 minutes

Nginx là một trong những máy chủ web phổ biến nhất trên thế giới, được sử dụng để vận hành nhiều trang web có lưu lượng truy cập lớn nhất hiện nay. Đây là giải pháp nhẹ, linh hoạt, có thể đóng vai trò máy chủ web hoặc reverse proxy.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt Nginx trên Ubuntu 22.04, cấu hình tường lửa, quản lý tiến trình, và thiết lập server blocks để lưu trữ nhiều tên miền trên cùng một máy chủ.

cài đặt Nginx trên Ubuntu 22.04

Yêu cầu trước khi bắt đầu

Trước khi bắt đầu, bạn cần có một tài khoản người dùng thông thường (không phải root) với quyền sudo trên máy chủ.

Ngoài ra, bạn có thể đăng ký tên miền trước khi thực hiện các bước cuối cùng trong hướng dẫn này.

Khi đã sẵn sàng, hãy đăng nhập vào máy chủ bằng tài khoản người dùng không phải root để bắt đầu.

Bước 1: Cài đặt Nginx

Vì Nginx đã có sẵn trong repo mặc định của Ubuntu, bạn có thể cài đặt nó bằng hệ thống quản lý gói apt.

Vì đây là lần đầu tiên chúng ta tương tác với hệ thống quản lý gói apt trong phiên làm việc này, chúng ta sẽ cập nhật chỉ mục gói cục bộ để có được danh sách gói mới nhất. Sau đó, chúng ta có thể cài đặt nginx:

sudo apt update
sudo apt install nginx

Khi được yêu cầu xác nhận cài đặt, hãy nhấn Y. Nếu được yêu cầu khởi động lại một số dịch vụ, nhấn ENTER để chấp nhận cấu hình mặc định và tiếp tục. apt sẽ cài đặt Nginx và các phụ thuộc cần thiết vào máy chủ.

Bước 2: Cấu hình tường lửa

Trước khi kiểm tra Nginx, bạn cần cấu hình phần mềm tường lửa để cho phép truy cập vào dịch vụ này. Sau khi cài đặt, Nginx sẽ tự đăng ký như một dịch vụ với ufw, nhờ đó việc cho phép Nginx truy cập qua tường lửa sẽ đơn giản hơn.

Hãy liệt kê các cấu hình ứng dụng mà ufw nhận diện được bằng lệnh sau:

sudo ufw app list

Bạn sẽ thấy kết quả như sau:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Trong phần kết quả, có ba profile khả dụng cho Nginx:

  • Nginx Full: Mở cổng 80 (HTTP không mã hóa) và cổng 443 (HTTPS mã hóa SSL/TLS)
  • Nginx HTTP: Chỉ mở cổng 80
  • Nginx HTTPS: Chỉ mở cổng 443

Bạn nên sử dụng cấu hình hạn chế nhất mà vẫn đáp ứng nhu cầu truy cập. Trong trường hợp này, chỉ cần cho phép cổng 80:

Bạn có thể bật cấu hình này bằng cách nhập:

sudo ufw allow 'Nginx HTTP'

Xác nhận thay đổi bằng:

sudo ufw status

Kết quả xuất ra sẽ cho biết loại lưu lượng HTTP nào được phép:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Bước 3: Kiểm tra máy chủ Web

Kết thúc quá trình cài đặt, Ubuntu 22.04 sẽ khởi động Nginx. Máy chủ web lúc này sẽ được kích hoạt và chạy.

Chúng ta có thể dùng hệ thống init systemd để kiểm tra xem dịch vụ có đang chạy hay không bằng cách nhập:

systemctl status nginx

Kết quả mẫu:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-03-01 16:08:19 UTC; 3 days ago
       Docs: man:nginx(8)
   Main PID: 2369 (nginx)
      Tasks: 2 (limit: 1153)
     Memory: 3.5M
     CGroup: /system.slice/nginx.service
             ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─2380 nginx: worker process

Như đã xác nhận, dịch vụ đã khởi động thành công. Tuy nhiên, cách chắc chắn nhất để kiểm tra là gửi yêu cầu thực tế đến một trang do Nginx phục vụ.

Bạn có thể truy cập trang mặc định của Nginx để xác nhận phần mềm đang hoạt động bình thường bằng cách mở địa chỉ IP của máy chủ trong trình duyệt. Nếu chưa biết địa chỉ IP, bạn có thể sử dụng công cụ icanhazip.com để tra cứu. Công cụ này sẽ trả về địa chỉ IP công khai của máy chủ từ một vị trí khác trên Internet.

curl -4 icanhazip.com

Khi đã có địa chỉ IP của máy chủ, hãy nhập nó vào thanh địa chỉ của trình duyệt:

http://your_server_ip

Bạn sẽ thấy trang chào mừng mặc định của Nginx:

Hướng Dẫn Cài Đặt Nginx Trên Ubuntu 22.04

Trang này cho thấy máy chủ đã có thể vận hành và quản lý.

Bước 4: Quản lý tiến trình Nginx

Bây giờ khi máy chủ web của bạn đã hoạt động, hãy xem qua một số lệnh quản lý cơ bản.

Để dừng máy chủ web, gõ:

sudo systemctl stop nginx

Để khởi động lại máy chủ web khi đang dừng, nhập:

sudo systemctl start nginx

Để dừng và khởi động lại dịch vụ, nhập:

sudo systemctl restart nginx

Nếu bạn chỉ thay đổi cấu hình mà không cần dừng dịch vụ, Nginx thường có thể tải lại mà không ngắt kết nối hiện tại. Thực hiện bằng cách nhập:

sudo systemctl reload nginx

Theo cấu hình mặc định, Nginx luôn tự khởi động cùng hệ thống. Nếu không muốn, bạn có thể vô hiệu hóa bằng lệnh:

sudo systemctl disable nginx

Để kích hoạt lại chế độ khởi động cùng hệ thống, bạn có thể dùng lệnh:

sudo systemctl enable nginx

Bạn đã nắm được các lệnh quản lý cơ bản và có thể tiến hành cấu hình để máy chủ phục vụ nhiều tên miền cùng lúc.

Bước 5: Thiết lập Server Block (Khuyến nghị)

Khi sử dụng máy chủ web Nginx, server block (tương tự như virtual host trong Apache) cho phép tách biệt cấu hình và phục vụ nhiều tên miền trên cùng một máy chủ.

Trong ví dụ này, chúng ta sẽ cấu hình cho tên miền giả định your_domain. Khi triển khai thực tế, bạn cần thay thế bằng tên miền của mình.

Trên Ubuntu 22.04, Nginx được cài đặt kèm một server block mặc định, phục vụ nội dung từ thư mục /var/www/html. Cấu hình này thích hợp cho một website duy nhất, nhưng sẽ khó quản lý khi cần lưu trữ nhiều website.

Thay vì chỉnh sửa trực tiếp /var/www/html, chúng ta sẽ tạo một thư mục riêng cho your_domain bên trong /var/www, đồng thời giữ nguyên /var/www/html làm thư mục mặc định (chỉ phục vụ khi yêu cầu của client không khớp với bất kỳ tên miền nào khác).

Tạo thư mục cho your_domain như sau, sử dụng cờ -p để tạo cả các thư mục cha cần thiết:

sudo mkdir -p /var/www/your_domain/html

Tiếp theo, gán quyền sở hữu thư mục cho người dùng hiện tại bằng biến môi trường $USER:

sudo chown -R $USER:$USER /var/www/your_domain/html

Quyền của thư mục gốc web sẽ ở trạng thái đúng nếu bạn chưa thay đổi giá trị umask, giá trị này đặt quyền mặc định cho tệp.

Để đảm bảo quyền được thiết lập đúng, cho phép chủ sở hữu đọc, ghi và thực thi tệp, còn nhóm và những người khác chỉ có quyền đọc và thực thi, bạn có thể nhập lệnh sau:

sudo chmod -R 755 /var/www/your_domain

Tiếp theo, tạo một trang index.html mẫu bằng nano hoặc trình soạn thảo mà bạn ưa thích:

nano /var/www/your_domain/html/index.html

Bên trong, thêm đoạn HTML mẫu như sau:

<html>
    <head>
        <title>Welcome to your_domain!</title>
    </head>
    <body>
        <h1>Success! The your_domain server block is working!</h1>
    </body>
</html>

Lưu và đóng tệp bằng cách nhấn Ctrl+X để thoát, sau đó khi được hỏi lưu, nhấn Y và rồi Enter.

Để Nginx có thể phục vụ nội dung này, cần tạo một server block với các chỉ thị tương ứng. Thay vì chỉnh sửa trực tiếp tệp cấu hình mặc định, hãy tạo một tệp mới tại /etc/nginx/sites-available/your_domain:

sudo nano /etc/nginx/sites-available/your_domain

Dán khối cấu hình dưới đây vào tệp. Khối cấu hình này tương tự như cấu hình mặc định, nhưng đã được điều chỉnh phù hợp với thư mục và tên miền mới của chúng ta.

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

    root /var/www/your_domain/html;
    index index.html index.htm index.nginx-debian.html;

    server_name your_domain www.your_domain;

    location / {
        try_files $uri $uri/ =404;
    }
}

Lưu ý, chúng ta đã cập nhật cấu hình root thành thư mục mới và server_name thành tên miền của bạn. Tiếp theo, bạn cần kích hoạt tệp cấu hình bằng cách tạo liên kết từ tệp này đến thư mục sites-enabled, nơi Nginx sẽ đọc khi khởi động:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Lưu ý: Nginx sử dụng một phương pháp phổ biến gọi là symbolic links (liên kết tượng trưng hay symlinks) để quản lý các server block đang được kích hoạt. Việc tạo symlink giống như tạo một phím tắt trên ổ đĩa, vì thế bạn có thể xóa phím tắt trong thư mục sites-enabled mà vẫn giữ nguyên server block trong sites-available nếu muốn kích hoạt lại sau này.

Hiện tại có hai server block được kích hoạt và cấu hình để phản hồi các yêu cầu dựa trên các chỉ thị listenserver_name (bạn có thể đọc thêm về cách Nginx xử lý các chỉ thị này tại đây):

  • your_domain: sẽ phản hồi các yêu cầu tới your_domainwww.your_domain.
  • default: sẽ phản hồi các yêu cầu trên cổng 80 mà không khớp với hai block trên.

Để tránh lỗi bộ nhớ hash bucket có thể phát sinh khi thêm các tên server, bạn cần điều chỉnh một giá trị trong file /etc/nginx/nginx.conf. Mở file này ra:

sudo nano /etc/nginx/nginx.conf

Tìm chỉ thị server_names_hash_bucket_size và bỏ dấu # ở đầu dòng để bỏ chú thích dòng này. Nếu bạn dùng nano, bạn có thể tìm kiếm nhanh bằng cách nhấn tổ hợp phím CTRL + W rồi nhập từ khóa cần tìm.

Lưu ý: Việc chú thích dòng mã bằng cách đặt dấu # ở đầu dòng là phương pháp để vô hiệu hóa chúng mà không cần xóa bỏ hoàn toàn. Nhiều tệp cấu hình thường có sẵn các tùy chọn được chú thích, giúp bạn dễ dàng bật hoặc tắt bằng cách chuyển đổi giữa trạng thái mã lệnh hoạt động và phần chú thích.

/etc/nginx/nginx.conf

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

Lưu và đóng file khi bạn hoàn tất.

Tiếp theo, kiểm tra để đảm bảo không có lỗi cú pháp nào trong các file cấu hình Nginx bằng lệnh sau:

sudo nginx -t

Nếu không có vấn đề gì, bạn có thể khởi động lại Nginx để áp dụng các thay đổi của mình:

sudo systemctl restart nginx

Giờ thì Nginx đã bắt đầu phục vụ tên miền của bạn. Bạn có thể kiểm tra bằng cách truy cập vào địa chỉ http\\://your\\_domain, tại đó bạn sẽ thấy giao diện tương tự như sau:

Hướng Dẫn Cài Đặt Nginx Trên Ubuntu 22.04

Bước 6: Làm quen với các tệp và thư mục quan trọng của Nginx

Sau khi đã nắm được cách quản lý dịch vụ Nginx, bạn nên dành vài phút để làm quen với các thư mục và tệp cấu hình quan trọng sau.

  1. Nội dung
  • /var/www/html: Nội dung web thực tế, mặc định chỉ gồm trang Nginx mặc định mà bạn đã thấy trước đó, được phục vụ từ thư mục /var/www/html. Bạn có thể thay đổi bằng cách chỉnh sửa các file cấu hình của Nginx.
  1. Cấu hình máy chủ
  • /etc/nginx: Thư mục cấu hình của Nginx. Tất cả các file cấu hình của Nginx đều nằm ở đây.
  • /etc/nginx/nginx.conf: File cấu hình chính của Nginx. File này có thể được chỉnh sửa để thay đổi cấu hình toàn cục của Nginx.
  • /etc/nginx/sites-available/: Thư mục nơi lưu trữ các server block theo từng site. Nginx sẽ không sử dụng các file cấu hình trong thư mục này trừ khi chúng được liên kết tới thư mục sites-enabled. Thông thường, tất cả cấu hình server block được thực hiện trong thư mục này, rồi được kích hoạt bằng cách tạo liên kết tới thư mục kia.
  • /etc/nginx/sites-enabled/: Thư mục lưu trữ các server block theo từng site đã được kích hoạt. Thông thường, các file này được tạo ra bằng cách liên kết tới các file cấu hình trong thư mục sites-available.
  • /etc/nginx/snippets: Thư mục chứa các đoạn cấu hình có thể được chèn vào các vị trí khác trong cấu hình Nginx. Những đoạn cấu hình có thể tái sử dụng là lựa chọn tốt để được tái cấu trúc thành các snippet.
  1. Nhật ký máy chủ
  • /var/log/nginx/access.log: Mỗi yêu cầu tới máy chủ web của bạn sẽ được ghi lại trong file nhật ký này, trừ khi Nginx được cấu hình khác.
  • /var/log/nginx/error.log: Bất kỳ lỗi nào của Nginx sẽ được ghi lại trong file nhật ký này.

Kết luận

Đến đây, bạn đã hoàn tất việc cài đặt máy chủ web và có thể thoải mái lựa chọn loại nội dung cũng như các công nghệ muốn tích hợp, nhằm mang lại trải nghiệm đa dạng và phong phú hơn cho người dùng.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất