Cách cài đặt Nginx trên Ubuntu 22.04 mới nhất | Setup Nginx Ubuntu Server 22.04

Cách cài đặt Nginx trên Ubuntu 22.04 mới nhất | Setup Nginx Ubuntu Server 22.04

Nginx là một trong những máy chủ web phổ biến nhất trên thế giới và chịu trách nhiệm lưu trữ một số trang web lớn với lưu lượng truy cập cao. Đây là lựa chọn nhẹ, có thể hoạt động như một máy chủ web hoặc proxy ngược.

Tiếp theo, chúng ta sẽ tìm hiểu cách cài đặt Nginx trên máy chủ Ubuntu 22.04 của bạn, điều chỉnh tường lửa, quản lý tiến trình Nginx và thiết lập các server block để lưu trữ nhiều tên miền trên cùng một máy chủ.

Ngoài ra, bạn có thể triển khai ứng dụng từ GitHub bằng DataOnline App Platform – hãy để DataOnline lo liệu việc mở rộng ứng dụng của bạn.

Điều Kiện Tiên Quyết khi Cài Đặt Nginx trên Ubuntu 22.04

Trước khi bắt đầu, bạn cần có:

  • Một tài khoản người dùng không phải root với quyền sudo được cấu hình trên máy chủ của bạn. Bạn có thể tìm hiểu cách cấu hình tài khoản người dùng thông thường qua hướng dẫn “Thiết Lập Máy Chủ Ban Đầu với Ubuntu 22.04.”
  • Ngoài ra, bạn cũng có thể muốn đăng ký một tên miền trước khi hoàn thành các bước cuối của hướng dẫn này. Tìm hiểu thêm về cách thiết lập tên miền với DataOnline.
  • Khi đã có tài khoản, hãy đăng nhập với tài khoản không phải root để bắt đầu.

Bước 1 – Cài Đặt Nginx trên Ubuntu 22.04

Vì Nginx có sẵn trong kho lưu trữ mặc định của Ubuntu, nên có thể cài đặt nó qua hệ thống quản lý gói apt.

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

sudo apt update
sudo apt install nginx

Nhấn Y khi được nhắc xác nhận cài đặt. Nếu được yêu cầu khởi động lại bất kỳ dịch vụ nào, nhấn ENTER để chấp nhận mặc định và tiếp tục. apt sẽ cài đặt Nginx và các phụ thuộc cần thiết trên máy chủ của bạn.

Bước 2 – Điều Chỉnh Tường Lửa trên Ubuntu 22.04

Trước khi kiểm tra Nginx, 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ụ. Khi cài đặt, Nginx tự đăng ký làm một dịch vụ với ufw, giúp việc cho phép truy cập trở nên đơn giản.

Liệt kê các cấu hình ứng dụng mà ufw hỗ trợ bằng lệnh:

sudo ufw app list

Bạn sẽ nhận được danh sách các profile ứng dụng:

Output

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Như đã hiển thị, có ba profile dành cho Nginx:

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

Chúng tôi khuyến nghị bạn kích hoạt profile hạn chế nhất mà vẫn cho phép lưu lượng cần thiết. Hiện tại, chỉ cần cho phép lưu lượng trên cổng 80.

Kích hoạt profile bằng lệnh:

sudo ufw allow 'Nginx HTTP'

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

sudo ufw allow 'Nginx HTTP'

Output:

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 Nginx trên Ubuntu

Sau khi cài đặt xong, Ubuntu 22.04 tự động khởi động Nginx. Máy chủ web nên đang hoạt động.

Để kiểm tra, sử dụng hệ thống khởi tạo systemd với lệnh:

systemctl status nginx

Output:

● 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ư output cho thấy, dịch vụ đã được khởi động thành công. Tuy nhiên, cách tốt nhất để kiểm tra là yêu cầu một trang từ Nginx.

Bạn có thể truy cập trang mặc định của Nginx bằng cách mở trình duyệt và nhập địa chỉ IP của máy chủ. Nếu chưa biết IP của máy chủ, hãy sử dụng công cụ icanhazip.com để lấy địa chỉ IP công khai:

curl -4 icanhazip.com

Sau đó, nhập địa chỉ trả về vào thanh địa chỉ của trình duyệt, ví dụ:

http://your_server_ip

Bạn sẽ nhận được trang mặc định của Nginx.

Bước 4 – Quản Lý Tiến Trình Nginx trên Ubuntu

Giờ máy chủ web đã chạy, hãy làm quen với một số lệnh quản lý cơ bản:

  • Dừng máy chủ web:
sudo systemctl stop nginx
  • Khởi động máy chủ khi đã dừng:
sudo systemctl start nginx
  • Khởi động lại dịch
sudo systemctl restart nginx
  • Tải lại cấu hình (không ngắt kết nối):
sudo systemctl reload nginx
  • Vô hiệu hóa tự khởi động cùng hệ thống:
sudo systemctl disable nginx
  • Kích hoạt tự khởi động cùng hệ thống:
sudo systemctl enable nginx

Bây giờ bạn đã nắm được các lệnh quản lý cơ bản và sẵn sàng cấu hình trang web để lưu trữ nhiều tên miền.

Bước 5 – Thiết Lập Server Blocks (Khuyến nghị)

Khi sử dụng Nginx, server blocks (tương tự như virtual hosts trong Apache) giúp đóng gói các chi tiết cấu hình và lưu trữ nhiều tên miền trên cùng một máy chủ. Chúng ta sẽ thiết lập một tên miền gọi là your_domain (bạn hãy thay thế bằng tên miền của riêng mình).

Ubuntu 22.04 với Nginx có một server block mặc định được kích hoạt, cấu hình để phục vụ nội dung từ thư mục /var/www/html. Mặc dù phù hợp với một trang web duy nhất, nhưng nếu lưu trữ nhiều trang, việc sử dụng /var/www/html có thể gây rắc rối. Thay vào đó, hãy tạo cấu trúc thư mục trong /var/www cho trang your_domain, giữ lại /var/www/html làm thư mục mặc định phục vụ khi không khớp với các trang khác.

Tạo thư mục cho your_domain:

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

Gán quyền sở hữu cho thư mục với biến môi trường $USER:

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

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

sudo chmod -R 755 /var/www/your_domain

Tạo trang index.html mẫu:

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

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

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

<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 (nhấn Ctrl+X, sau đó Y và Enter khi được nhắc).

Để Nginx phục vụ nội dung này, cần tạo một server block với các chỉ thị chính xác. Thay vì sửa đổi 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 sau đây, tương tự như cấu hình mặc định nhưng đã được cập nhật cho thư mục và tên miền mới của bạn:

/etc/nginx/sites-available/your_domain

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 ý rằng chúng ta đã cập nhật chỉ thị root trỏ đến thư mục mới và server_name thành tên miền của bạn.

Tiếp theo, hãy kích hoạt tệp cấu hình này bằng cách tạo một liên kết (symlink) từ nó đến thư mục sites-enabled, nơi Nginx đọc cấu hình 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) để theo dõi các server block đã được kích hoạt. Việc tạo một symlink giống như tạo một phím tắt trên ổ đĩa, cho phép bạn sau này xóa phím tắt trong thư mục sites-enabled mà vẫn giữ lại server block trong sites-available nếu bạn muốn kích hoạt lại.

Hiện tại, 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ể tìm hiểu 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 cho your_domain và www.your_domain.
  • default: Sẽ phản hồi mọi yêu cầu trên cổng 80 không khớp với hai block còn lại.

Để tránh vấn đề về bộ nhớ hash bucket có thể phát sinh khi thêm các tên miền phụ, cần điều chỉnh một giá trị duy nhất trong tệp /etc/nginx/nginx.conf. Mở tệp này:

sudo nano /etc/nginx/nginx.conf

Tìm chỉ thị server_names_hash_bucket_size và bỏ ký hiệu # để mở dòng đó. Nếu bạn dùng nano, bạn có thể nhanh chóng tìm kiếm từ trong tệp bằng cách nhấn CTRL + W.

Lưu ý: Việc comment (bình luận) các dòng mã – thường bằng cách đặt # ở đầu dòng – là một cách để vô hiệu hóa chúng mà không cần xóa. Nhiều tệp cấu hình đi kèm với nhiều tùy chọn đã được comment sẵn để có thể bật hoặc tắt bằng cách chuyển đổi giữa mã hoạt động và tài liệu hướng dẫn.

/etc/nginx/nginx.conf

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

Lưu và đóng tệp khi hoàn tất.

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

sudo nginx -t

Nếu không có lỗi nào được hiển thị, khởi động lại Nginx để áp dụng các thay đổi:

sudo systemctl restart nginx

Bây giờ, Nginx sẽ phục vụ tên miền của bạn. Bạn có thể kiểm tra điều này bằng cách truy cập http://your_domain

Bước 6 – Làm Quen Với Các Tệp và Thư Mục Quan Trọng của Nginx

Bây giờ, khi bạn đã biết cách quản lý dịch vụ Nginx, hãy dành vài phút để làm quen với một số thư mục và tệp cấu hình quan trọng.

Nội dung

  • /var/www/html: Nội dung thực tế của trang web, mặc định chỉ gồm trang Nginx mẫu mà bạn đã thấy trước đó, được phục vụ từ thư mục /var/www/html. Bạn có thể thay đổi điều này bằng cách chỉnh sửa các tệp cấu hình Nginx.

Cấu hình máy chủ

  • /etc/nginx: Thư mục chứa các tệp cấu hình của Nginx.
  • /etc/nginx/nginx.conf: Tệp cấu hình chính của Nginx; bạn có thể sửa đổi tệp này để thay đổi cấu hình toàn cục của Nginx.
  • /etc/nginx/sites-available/: Thư mục lưu trữ các server block cho từng trang web. Nginx sẽ không sử dụng các tệp ở đây trừ khi chúng được liên kết vào thư mục sites-enabled. Thông thường, cấu hình server block được thực hiện ở đây, sau đó được kích hoạt bằng cách tạo liên kết sang thư mục kia.
  • /etc/nginx/sites-enabled/: Thư mục chứa các server block đã được kích hoạt cho từng trang web. Thông thường, chúng được tạo bằng cách liên kết đến các tệp cấu hình trong sites-available.
  • /etc/nginx/snippets: Thư mục chứa các mảnh cấu hình có thể được chèn vào các tệp cấu hình khác của Nginx. Các đoạn cấu hình có tính lặp lại là ứng viên tốt để tái cấu trúc thành snippets.

Nhật ký máy chủ

  • /var/log/nginx/access.log: Mọi yêu cầu đến máy chủ web của bạn được ghi lại trong tệp log này, trừ khi Nginx được cấu hình khác.
  • /var/log/nginx/error.log: Mọi lỗi của Nginx sẽ được ghi lại trong tệp log này.

Kết Luận

Bây giờ, khi bạn đã cài đặt máy chủ web, bạn có rất nhiều lựa chọn về loại nội dung phục vụ và các công nghệ để tạo ra một trải nghiệm phong phú hơn.

Nếu bạn muốn xây dựng một ngăn xếp ứng dụng hoàn chỉnh hơn, hãy xem bài “Cách Cài Đặt Linux, Nginx, MySQL, PHP (LEMP stack) trên Ubuntu 22.04.

Để thiết lập HTTPS cho tên miền của bạn với chứng chỉ SSL miễn phí sử dụng Let’s Encrypt, hãy chuyển sang bài “Cách Bảo Mật Nginx với Let’s Encrypt trên Ubuntu 22.04.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *