Cấu Hình Server Block Nginx: Hướng Dẫn Chi Tiết Cho Người Mới

Nginx là một web server mạnh mẽ, linh hoạt và được sử dụng rộng rãi. Một trong những tính năng quan trọng nhất của Nginx là khả năng cấu hình server block, cho phép bạn chạy nhiều website trên cùng một server. Bài viết này sẽ hướng dẫn bạn từng bước cách Cấu Hình Server Block Nginx một cách chi tiết và dễ hiểu, ngay cả khi bạn là người mới bắt đầu.

Server Block Nginx Là Gì Và Tại Sao Nó Quan Trọng?

Server block (còn được gọi là virtual host trong Apache) là một đoạn cấu hình trong Nginx cho phép bạn định nghĩa cách server xử lý các yêu cầu đến từ một tên miền hoặc địa chỉ IP cụ thể. Nói một cách đơn giản, nó giống như việc bạn chia một căn nhà lớn thành nhiều căn hộ nhỏ, mỗi căn hộ đại diện cho một website riêng biệt.

Vậy tại sao cấu hình server block Nginx lại quan trọng?

  • Tiết kiệm chi phí: Thay vì phải mua nhiều server cho mỗi website, bạn có thể chạy tất cả trên một server duy nhất, giảm đáng kể chi phí phần cứng và bảo trì.
  • Quản lý dễ dàng: Bạn có thể quản lý nhiều website một cách tập trung, dễ dàng cập nhật cấu hình, bảo mật và theo dõi hiệu suất.
  • Linh hoạt: Nginx cho phép bạn tùy chỉnh cấu hình cho từng website một cách độc lập, đáp ứng các yêu cầu riêng biệt.

“Server block là xương sống của việc quản lý nhiều website trên một server Nginx. Nắm vững nó giúp bạn kiểm soát hoàn toàn lưu lượng truy cập và tối ưu hiệu suất cho từng website,” – Ông Trần Văn An, Chuyên gia DevOps tại FPT Software chia sẻ.

Các Bước Cấu Hình Server Block Nginx

Dưới đây là hướng dẫn chi tiết từng bước để cấu hình server block Nginx:

Bước 1: Xác định Tên Miền Và Địa Chỉ IP

Trước khi bắt đầu, bạn cần xác định tên miền mà bạn muốn sử dụng cho website mới và địa chỉ IP của server. Đảm bảo rằng tên miền đã được trỏ đến địa chỉ IP của server thông qua bản ghi DNS.

Bước 2: Tạo Cấu Trúc Thư Mục Cho Website

Tạo một thư mục để chứa các file của website. Thông thường, thư mục này sẽ nằm trong /var/www/ hoặc /home/. Ví dụ, nếu bạn muốn tạo một server block cho website example.com, bạn có thể tạo thư mục như sau:

sudo mkdir -p /var/www/example.com/html

Trong đó:

  • /var/www/example.com là thư mục gốc của website.
  • html là thư mục chứa các file HTML, CSS, JavaScript,… của website.

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

sudo chown -R $USER:$USER /var/www/example.com/html

Điều này cho phép bạn tạo và chỉnh sửa các file trong thư mục mà không cần quyền sudo.

Bước 3: Tạo File Cấu Hình Server Block Nginx

File cấu hình server block Nginx chứa các chỉ thị hướng dẫn Nginx cách xử lý các yêu cầu đến từ tên miền. Tạo một file cấu hình mới trong thư mục /etc/nginx/conf.d/ hoặc /etc/nginx/sites-available/. Tên file nên phản ánh tên miền của website.

Ví dụ, tạo file cấu hình cho example.com:

sudo nano /etc/nginx/conf.d/example.com.conf

Sau đó, dán đoạn cấu hình sau vào file:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm;

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

Giải thích các chỉ thị:

  • listen 80;: Nginx sẽ lắng nghe các yêu cầu HTTP đến cổng 80 (cổng mặc định cho HTTP).
  • server_name example.com www.example.com;: Xác định tên miền mà server block này sẽ xử lý.
  • root /var/www/example.com/html;: Chỉ định thư mục gốc của website.
  • index index.html index.htm;: Chỉ định các file index mặc định.
  • location / { ... }: Định nghĩa cách xử lý các yêu cầu đến các URL khác nhau. Trong trường hợp này, nó sẽ cố gắng tìm file tương ứng hoặc trả về lỗi 404 nếu không tìm thấy.

Nếu bạn muốn cấu hình HTTPS (kết nối an toàn), bạn cần thêm các chỉ thị liên quan đến SSL/TLS. Điều này sẽ được đề cập chi tiết hơn ở phần sau.

Bước 4: Kích Hoạt Server Block Nginx

Sau khi tạo file cấu hình, bạn cần kích hoạt server block bằng cách tạo một liên kết tượng trưng (symbolic link) từ file cấu hình trong /etc/nginx/conf.d/ hoặc /etc/nginx/sites-available/ đến thư mục /etc/nginx/sites-enabled/.

Nếu bạn sử dụng /etc/nginx/sites-available//etc/nginx/sites-enabled/, bạn có thể sử dụng lệnh sau:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Sau đó, kiểm tra cấu hình Nginx để đảm bảo không có lỗi:

sudo nginx -t

Nếu không có lỗi, hãy khởi động lại Nginx để áp dụng các thay đổi:

sudo systemctl restart nginx

“Việc kích hoạt server block bằng liên kết tượng trưng giúp bạn dễ dàng bật tắt website mà không cần phải chỉnh sửa trực tiếp file cấu hình gốc,” – Kỹ sư hệ thống Lê Thị Mai chia sẻ.

Bước 5: Kiểm Tra Cấu Hình

Tạo một file index.html đơn giản trong thư mục /var/www/example.com/html để kiểm tra xem server block đã hoạt động chưa:

sudo nano /var/www/example.com/html/index.html

Dán đoạn mã HTML sau vào file:

<!DOCTYPE html>
<html>
<head>
    <title>Welcome to example.com!</title>
</head>
<body>
    <h1>Success! The example.com server block is working!</h1>
</body>
</html>

Lưu file và truy cập example.com trên trình duyệt. Nếu bạn thấy trang “Success! The example.com server block is working!”, thì bạn đã cấu hình thành công.

Cấu Hình HTTPS Cho Server Block Nginx

Để bảo mật website của bạn, bạn nên cấu hình HTTPS bằng cách sử dụng chứng chỉ SSL/TLS. Có nhiều cách để lấy chứng chỉ SSL/TLS, nhưng cách phổ biến nhất là sử dụng Let’s Encrypt, một tổ chức cung cấp chứng chỉ SSL/TLS miễn phí và tự động.

Cài Đặt Certbot

Certbot là một công cụ tự động giúp bạn lấy và cài đặt chứng chỉ Let’s Encrypt. Cài đặt Certbot bằng lệnh sau:

sudo apt update
sudo apt install certbot python3-certbot-nginx

Lấy Chứng Chỉ SSL/TLS

Sử dụng Certbot để lấy chứng chỉ SSL/TLS cho example.com:

sudo certbot --nginx -d example.com -d www.example.com

Certbot sẽ tự động cấu hình Nginx để sử dụng chứng chỉ SSL/TLS. Bạn chỉ cần làm theo các hướng dẫn trên màn hình.

Kiểm Tra Cấu Hình HTTPS

Sau khi Certbot hoàn tất, truy cập https://example.com trên trình duyệt. Bạn sẽ thấy một biểu tượng khóa màu xanh lá cây trên thanh địa chỉ, cho biết kết nối đã được mã hóa an toàn.

Các Tùy Chọn Cấu Hình Nâng Cao

Ngoài các cấu hình cơ bản, Nginx còn cung cấp nhiều tùy chọn cấu hình nâng cao để bạn tùy chỉnh server block theo nhu cầu của mình.

Chuyển Hướng HTTP Sang HTTPS

Để đảm bảo tất cả các yêu cầu đều được chuyển hướng đến HTTPS, bạn có thể thêm đoạn cấu hình sau vào server block HTTP (port 80):

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Lệnh return 301 sẽ chuyển hướng vĩnh viễn (permanent redirect) tất cả các yêu cầu HTTP đến HTTPS.

Cấu Hình Logging

Bạn có thể tùy chỉnh cách Nginx ghi log bằng cách sử dụng các chỉ thị access_logerror_log. Ví dụ:

access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;

Điều này sẽ ghi log truy cập và lỗi vào các file riêng biệt cho example.com.

Cấu Hình Cache

Bạn có thể cấu hình cache để cải thiện hiệu suất website. cấu hình caching cho nginx có thể giúp bạn giảm tải cho server và tăng tốc độ tải trang. Ví dụ:

location / {
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    proxy_cache my_cache;
    proxy_pass http://backend;
}

Đoạn cấu hình này sẽ cache các phản hồi 200 và 302 trong 10 phút, và các phản hồi 404 trong 1 phút. my_cache là một zone cache đã được định nghĩa trước đó trong cấu hình Nginx.

“Cấu hình cache là một yếu tố quan trọng để tối ưu hiệu suất website. Nó giúp giảm tải cho server và cải thiện trải nghiệm người dùng,” – Chuyên gia tối ưu hiệu suất web Nguyễn Đức Hùng nhận định.

Cấu Hình Gzip Compression

cấu hình gzip compression nginx giúp giảm kích thước file truyền tải, từ đó tăng tốc độ tải trang. Để bật gzip compression, thêm đoạn cấu hình sau vào server block:

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/rss+xml application/atom+xml image/svg+xml;

Giới Hạn Truy Cập

Bạn có thể giới hạn truy cập vào website hoặc một phần của website bằng cách sử dụng các chỉ thị allowdeny. Ví dụ:

location /admin {
    allow 192.168.1.0/24;
    deny all;
}

Đoạn cấu hình này chỉ cho phép các địa chỉ IP trong mạng 192.168.1.0/24 truy cập vào thư mục /admin.

Khắc Phục Sự Cố

Trong quá trình cấu hình server block Nginx, bạn có thể gặp phải một số sự cố. Dưới đây là một số vấn đề thường gặp và cách khắc phục:

  • “404 Not Found”: Lỗi này thường xảy ra khi Nginx không tìm thấy file hoặc thư mục được yêu cầu. Kiểm tra lại đường dẫn rootindex trong file cấu hình.
  • “502 Bad Gateway”: Lỗi này thường xảy ra khi Nginx không thể kết nối với backend server. nginx bị lỗi bad gateway xử lý ra sao sẽ giúp bạn hiểu rõ nguyên nhân và cách khắc phục. Kiểm tra xem backend server có đang chạy không và cấu hình proxy_pass có đúng không.
  • “Website không hiển thị”: Kiểm tra xem server block đã được kích hoạt chưa (có liên kết tượng trưng trong /etc/nginx/sites-enabled/ không), và cấu hình Nginx có lỗi không (sudo nginx -t).
  • “HTTPS không hoạt động”: Kiểm tra xem chứng chỉ SSL/TLS đã được cài đặt đúng cách chưa, và các chỉ thị liên quan đến SSL/TLS đã được cấu hình trong file cấu hình.

Nếu bạn vẫn gặp khó khăn, hãy kiểm tra log file của Nginx (/var/log/nginx/error.log) để tìm thêm thông tin chi tiết về lỗi.

Nginx Hay Apache?

Nhiều người thắc mắc nên chọn nginx hay apache cho hosting. Cả Nginx và Apache đều là những web server mạnh mẽ, nhưng chúng có những ưu điểm và nhược điểm riêng. Nginx thường được đánh giá cao hơn về hiệu suất, đặc biệt là trong việc xử lý các kết nối đồng thời. Apache lại có ưu điểm về tính linh hoạt và dễ cấu hình. Lựa chọn giữa Nginx và Apache phụ thuộc vào yêu cầu cụ thể của bạn.

Kết Luận

Cấu hình server block Nginx là một kỹ năng quan trọng đối với bất kỳ ai muốn quản lý nhiều website trên một server. Bài viết này đã cung cấp cho bạn một hướng dẫn chi tiết từng bước, từ cấu hình cơ bản đến các tùy chọn nâng cao. Hy vọng rằng bạn sẽ áp dụng thành công những kiến thức này để xây dựng và quản lý các website của mình một cách hiệu quả. Hãy nhớ rằng việc thực hành thường xuyên là chìa khóa để thành thạo bất kỳ kỹ năng nào, vì vậy đừng ngần ngại thử nghiệm và khám phá thêm các tính năng của Nginx. Nếu bạn mới bắt đầu làm quen với Nginx, hướng dẫn cài nginx trên ubuntu có thể hữu ích cho bạn.

Câu hỏi thường gặp (FAQ)

  1. Server block Nginx là gì?

    Server block (còn gọi là virtual host) là một cấu hình trong Nginx cho phép bạn chạy nhiều website trên cùng một server bằng cách định nghĩa cách server xử lý các yêu cầu đến từ một tên miền hoặc địa chỉ IP cụ thể.

  2. Làm thế nào để tạo server block Nginx?

    Bạn cần tạo một file cấu hình mới trong /etc/nginx/conf.d/ hoặc /etc/nginx/sites-available/, định nghĩa các chỉ thị như listen, server_name, rootindex. Sau đó, tạo một liên kết tượng trưng đến /etc/nginx/sites-enabled/ và khởi động lại Nginx.

  3. Làm sao để kiểm tra cấu hình Nginx?

    Sử dụng lệnh sudo nginx -t để kiểm tra cấu hình. Nếu không có lỗi, bạn có thể khởi động lại Nginx bằng sudo systemctl restart nginx.

  4. Làm thế nào để cấu hình HTTPS cho server block Nginx?

    Bạn có thể sử dụng Certbot để tự động lấy và cài đặt chứng chỉ SSL/TLS từ Let’s Encrypt. Certbot sẽ tự động cấu hình Nginx để sử dụng chứng chỉ.

  5. Làm thế nào để chuyển hướng HTTP sang HTTPS trong Nginx?

    Thêm đoạn cấu hình return 301 https://$host$request_uri; vào server block HTTP (port 80) để chuyển hướng tất cả các yêu cầu đến HTTPS.

  6. Tại sao website của tôi hiển thị lỗi “404 Not Found”?

    Lỗi này thường xảy ra khi Nginx không tìm thấy file hoặc thư mục được yêu cầu. Kiểm tra lại đường dẫn rootindex trong file cấu hình, cũng như đảm bảo file tồn tại.

  7. Tôi nên chọn Nginx hay Apache cho website của mình?

    Nginx thường được ưa chuộng vì hiệu suất cao, đặc biệt khi xử lý nhiều kết nối đồng thời. Apache lại linh hoạt và dễ cấu hình hơn. Lựa chọn phụ thuộc vào nhu cầu cụ thể của bạn.