0
0
Lập trình
TT

Hướng Dẫn Toàn Diện Sử Dụng Nginx

Đăng vào 7 tháng trước

• 8 phút đọc

Giới thiệu

Nginx (đọc là "engine-x") là một máy chủ web hiệu suất cao, proxy ngược và bộ cân bằng tải. Được tạo ra bởi Igor Sysoev vào năm 2004, Nginx đã trở thành một trong những máy chủ web phổ biến nhất trên thế giới nhờ vào hiệu quả, độ ổn định và khả năng tiêu tốn tài nguyên thấp.

Tính năng chính

  • Hiệu suất cao: Có khả năng xử lý hàng ngàn kết nối đồng thời.
  • Tiêu tốn bộ nhớ thấp: Sử dụng tài nguyên hiệu quả.
  • Proxy ngược: Chuyển hướng yêu cầu đến các máy chủ backend.
  • Cân bằng tải: Phân phối lưu lượng truy cập giữa nhiều máy chủ.
  • Kết thúc SSL/TLS: Xử lý các kết nối được mã hóa.
  • Phục vụ tệp tĩnh: Xuất sắc trong việc phục vụ nội dung tĩnh.
  • Caching HTTP: Tính năng caching tích hợp sẵn.

Cài đặt

Ubuntu/Debian

Copy
sudo apt update
sudo apt install nginx

CentOS/RHEL/Fedora

Copy
# CentOS/RHEL
sudo yum install nginx

# Fedora
sudo dnf install nginx

macOS (sử dụng Homebrew)

Copy
brew install nginx

Khởi động và Kích hoạt Nginx

Copy
# Bắt đầu nginx
sudo systemctl start nginx

# Kích hoạt nginx khởi động cùng hệ thống
sudo systemctl enable nginx

# Kiểm tra trạng thái
sudo systemctl status nginx

Cấu hình cơ bản

Cấu trúc tệp cấu hình

Tệp cấu hình Nginx thường nằm ở:

  • Tệp cấu hình chính: /etc/nginx/nginx.conf
  • Cấu hình trang: /etc/nginx/sites-available//etc/nginx/sites-enabled/
  • Cấu hình bổ sung: /etc/nginx/conf.d/

Cấu trúc cơ bản của nginx.conf

Copy
# Ngữ cảnh chính
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Ngữ cảnh sự kiện
events {
    worker_connections 1024;
    use epoll;
}

# Ngữ cảnh HTTP
http {
    # Loại MIME và cài đặt cơ bản
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Ghi nhật ký
    access_log /var/log/nginx/access.log;

    # Cài đặt hiệu suất
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;

    # Bao gồm cấu hình bổ sung
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Các trường hợp sử dụng phổ biến

1. Máy chủ web tĩnh

Tạo một tệp cấu hình để phục vụ nội dung tĩnh:

Copy
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/html;
    index index.html index.htm;

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

    # Tối ưu hóa phục vụ tệp tĩnh
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

2. Proxy ngược

Chuyển hướng yêu cầu đến máy chủ ứng dụng backend:

Copy
server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. Bộ cân bằng tải

Phân phối lưu lượng đến nhiều máy chủ backend:

Copy
upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

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

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4. Cấu hình SSL/HTTPS

Cấu hình kết thúc SSL với chứng chỉ Let's Encrypt:

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

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # Cấu hình SSL hiện đại
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    root /var/www/html;
    index index.html;

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

Cấu hình nâng cao

Giới hạn tỷ lệ

Bảo vệ máy chủ của bạn khỏi lạm dụng:

Copy
http {
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

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

        location /api/ {
            limit_req zone=api burst=20 nodelay;
            proxy_pass http://backend;
        }
    }
}

Caching

Thực hiện caching HTTP:

Copy
http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g 
                     inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

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

Nén dữ liệu

Kích hoạt nén gzip:

Copy
http {
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/javascript
        application/xml+rss
        application/json;
}

Thực hành bảo mật tốt nhất

Ẩn phiên bản Nginx

Copy
http {
    server_tokens off;
}

Các tiêu đề bảo mật

Copy
server {
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
}

Giới hạn IP

Copy
location /admin {
    allow 192.168.1.0/24;
    allow 10.0.0.0/8;
    deny all;
}

Các lệnh phổ biến

Kiểm tra cấu hình

Copy
# Kiểm tra cú pháp cấu hình
sudo nginx -t

# Kiểm tra cấu hình và hiển thị chi tiết
sudo nginx -T

Tải lại cấu hình

Copy
# Tải lại cấu hình mà không bị gián đoạn
sudo systemctl reload nginx

# Hoặc sử dụng lệnh nginx
sudo nginx -s reload

Quản lý dịch vụ

Copy
# Bắt đầu nginx
sudo systemctl start nginx

# Dừng nginx
sudo systemctl stop nginx

# Khởi động lại nginx
sudo systemctl restart nginx

# Kiểm tra trạng thái
sudo systemctl status nginx

Khắc phục sự cố

Kiểm tra nhật ký

Copy
# Nhât ký lỗi
sudo tail -f /var/log/nginx/error.log

# Nhât ký truy cập
sudo tail -f /var/log/nginx/access.log

Các vấn đề phổ biến

Quyền bị từ chối (403 Forbidden)

  • Kiểm tra quyền tệp: chmod 644 fileschmod 755 directories
  • Xác minh người dùng nginx có quyền truy cập vào thư mục gốc tài liệu
  • Kiểm tra cài đặt SELinux nếu có.

Kết nối bị từ chối

  • Xác minh nginx đang chạy: systemctl status nginx
  • Kiểm tra xem cổng có đang được sử dụng không: netstat -tlnp | grep :80
  • Xem lại cài đặt tường lửa.

Lỗi cấu hình

  • Luôn kiểm tra cấu hình trước khi tải lại: nginx -t
  • Kiểm tra lỗi cú pháp trong các tệp cấu hình.
  • Xác minh các đường dẫn tệp tồn tại và có thể truy cập.

Tinh chỉnh hiệu suất

Quy trình làm việc và kết nối

Copy
# Đặt thành số lượng lõi CPU
worker_processes auto;

events {
    # Tăng cho các trang web có lưu lượng cao
    worker_connections 2048;
    use epoll;
    multi_accept on;
}

Kích thước bộ đệm

Copy
http {
    client_body_buffer_size 10K;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 2 1k;
}

Thời gian chờ

Copy
http {
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;
}

Giám sát

Giám sát cơ bản với Stub Status

Copy
server {
    listen 80;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        allow 127.0.0.1;
        deny all;
    }
}

Phân tích nhật ký

Sử dụng các công cụ như GoAccess để phân tích nhật ký:

Copy
goaccess /var/log/nginx/access.log --log-format=COMBINED

Kết luận

Nginx là một máy chủ web mạnh mẽ và linh hoạt có thể xử lý nhiều tình huống từ việc phục vụ tệp tĩnh đơn giản đến cấu hình cân bằng tải phức tạp. Chìa khóa để thành thạo Nginx là hiểu cấu trúc cấu hình của nó và dần dần xây dựng độ phức tạp khi cần thiết.

Bắt đầu với các cấu hình cơ bản và từ từ thêm các tính năng như SSL, caching và tiêu đề bảo mật. Luôn kiểm tra các cấu hình của bạn trước khi áp dụng vào môi trường sản xuất và giám sát hiệu suất máy chủ của bạn để đảm bảo hoạt động tối ưu.

Đối với các triển khai sản xuất, hãy xem xét việc thực hiện các chiến lược giám sát, ghi nhật ký và sao lưu thích hợp để duy trì hạ tầng web vững chắc.

Hãy chia sẻ suy nghĩ của bạn và góp ý cho bài viết này nếu bạn thấy bất kỳ điều gì không thuận tiện! Chúc bạn thành công!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào