Sunday, October 6, 2024

Logs trong Nginx

-

Logs trong Nginx là gì?

Logs trong Nginx là các thông tin chi tiết về hoạt động của Nginx, bao gồm các yêu cầu (requests) được gửi đến Nginx, các lỗi xảy ra và các hoạt động khác như truy cập vào các tài nguyên của máy chủ, tốc độ phản hồi của máy chủ, số lượng yêu cầu đã xử lý, và nhiều thông tin khác.

Ưu điểm.

Logs là một công cụ quan trọng để theo dõi và giám sát hoạt động của Nginx và các ứng dụng được phục vụ bởi Nginx. Chúng cho phép bạn xác định các vấn đề như lỗi 404 (không tìm thấy trang), tắc nghẽn mạng và tìm ra các vấn đề hiệu suất của máy chủ.

Logs cũng giúp cho việc phân tích dữ liệu và cải thiện hiệu suất của Nginx. Chẳng hạn, bạn có thể phân tích logs để tìm ra các trang web phổ biến nhất, tìm ra nguồn trafic và thực hiện các biện pháp tối ưu hóa như tối ưu hóa bộ nhớ đệm (caching) hoặc cân bằng tải (load balancing).

Nhược điểm.

Mặc dù log rất hữu ích để giám sát và phân tích hoạt động của máy chủ Nginx, tuy nhiên nó cũng có một số nhược điểm:

  • Tăng khối lượng lưu trữ: Các file log có thể phát triển nhanh chóng và chiếm nhiều không gian lưu trữ trên hệ thống. Do đó, việc quản lý các file log trở nên khó khăn hơn và có thể gây ra vấn đề về lưu trữ đĩa.
  • Tiết lộ thông tin nhạy cảm: Các file log có thể chứa các thông tin nhạy cảm như tên người dùng, địa chỉ IP, thông tin truy cập trang web và các yêu cầu bảo mật. Nếu file log này bị đánh cắp, nó có thể gây ra mối đe dọa về bảo mật và ảnh hưởng đến quyền riêng tư của người dùng.
  • Hiệu suất ảnh hưởng: Việc bật log có thể ảnh hưởng đến hiệu suất của máy chủ. Các file log cần được ghi và lưu trữ trên đĩa, và việc này có thể ảnh hưởng đến hiệu suất đĩa và tốc độ truy cập file.

Các loại logs trong Nginx.

Trong nginx, có nhiều loại log khác nhau để ghi lại các hoạt động của máy chủ web. Một số log quan trọng nhất là:

  • Access log: Log này ghi lại tất cả các yêu cầu HTTP được gửi đến máy chủ web, bao gồm các thông tin như địa chỉ IP của khách hàng, URL yêu cầu, trình duyệt được sử dụng, thời gian yêu cầu và mã trả về.
  • Error log: Log này ghi lại tất cả các thông báo lỗi và cảnh báo mà máy chủ web gặp phải khi xử lý các yêu cầu.
  • Rewrite log: Log này ghi lại tất cả các hoạt động liên quan đến việc tái viết URL.

Nhờ các log này, quản trị viên có thể giám sát và kiểm soát được hoạt động của máy chủ web, từ đó nâng cao hiệu suất, độ tin cậy và bảo mật của hệ thống.

Cách khai báo log.

Để khai báo log trong nginx config, ta có thể sử dụng các directive sau:

access_log: Dùng để ghi log truy cập của client vào server.

Cú pháp:

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

Trong đó:

  • path: đường dẫn đến file log sẽ được ghi
  • format: định dạng của log, ví dụ $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
  • buffer: dung lượng buffer sẽ sử dụng để lưu trữ log trước khi ghi ra file. Nếu không chỉ định thì mặc định sẽ là 64KB
  • gzip: nén file log bằng gzip. Level có thể là 1 đến 9 hoặc là off. Nếu không chỉ định thì mặc định là off
  • flush: tần suất ghi log ra file, được tính bằng giây. Nếu không chỉ định thì mặc định là 1 giây
  • if: chỉ định một điều kiện để ghi log. Ví dụ if=$loggable, trong đó $loggable là một biến mà ta đã định nghĩa trước đó

error_log: Dùng để ghi log lỗi của server.

Cú pháp:

error_log path [level];

Trong đó:

  • path: đường dẫn đến file log sẽ được ghi
  • level: mức độ của log. Có thể là debug, info, notice, warn, error, crit, alert hoặc emerg. Nếu không chỉ định thì mặc định là error.

– Rewrite log là một loại log trong Nginx, ghi lại các hoạt động liên quan đến việc sử dụng module “rewrite” của Nginx để chuyển hướng các yêu cầu HTTP.

Các thông tin ghi lại bao gồm yêu cầu ban đầu, yêu cầu được chuyển hướng đến và mã trả về. Để bật Rewrite log trong Nginx, ta cần thêm các câu lệnh sau vào file cấu hình Nginx:

http {
    ...
    rewrite_log on;
    error_log /var/log/nginx/error.log;
    ...
}

Trong đó, câu lệnh “rewrite_log on” cho phép ghi log cho module “rewrite”, và “error_log” được sử dụng để chỉ định nơi lưu trữ các file log. Sau khi cấu hình, các thông tin liên quan đến các hoạt động “rewrite” của Nginx sẽ được ghi vào file log được chỉ định trong câu lệnh “error_log”.

Ví dụ về khai báo log trong nginx config.

Các log trong cấu hình của bạn đang được khai báo trong phần “server” nên là đúng. Tuy nhiên, để đảm bảo rằng các thư mục và tên file log đã được tạo và đúng quyền truy cập, bạn cần phải tạo thư mục /var/log/nginx (nếu chưa tồn tại) và chạy lệnh sau trên terminal để tạo các file log và cấp quyền cho nginx:

sudo touch /var/log/nginx/access.log
sudo touch /var/log/nginx/error.log
sudo touch /var/log/nginx/rewrite.log
sudo chown -R www-data:www-data /var/log/nginx

Và dưới đây là ví dụ 1 cấu hình đầy đủ.

server {
    listen 443 ssl;
    listen 80;
    server_name wiki.hoanghd.com;
    proxy_redirect off;
    ssl_certificate /etc/nginx/letsencrypt/wiki.hoanghd.com.pem; #fullchain.pem
    ssl_certificate_key /etc/nginx/letsencrypt/wiki.hoanghd.com.pem; #privkey.pem
    ssl_trusted_certificate /etc/nginx/letsencrypt/wiki.hoanghd.com.pem; #chain.pem

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    rewrite_log on;

    location / {
    proxy_pass http://wiki-wordpress;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    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_buffering on;
    proxy_connect_timeout  3600s;
    proxy_read_timeout  3600s;
    proxy_send_timeout  3600s;
    send_timeout  3600s;
    client_max_body_size 10m;
    proxy_set_header X-Forwarded-Proto $scheme;
    add_header Content-Security-Policy upgrade-insecure-requests;

    allow 113.161.201.128;
    allow 103.15.49.222;
    allow 115.79.213.185;
    allow 192.168.100.111;
    deny all;
    }

    error_page 403 /error403.html;
    location = /error403.html {
        internal;
        root /etc/nginx/www/error403;
        allow all;
        charset utf-8;
    }

    location /images {
        root /etc/nginx/www/error403;
        allow all;
    }
}

Trong đó, access_log /var/log/nginx/access.log; sẽ ghi lại thông tin truy cập của các client vào file access.log tại đường dẫn /var/log/nginx/, error_log /var/log/nginx/error.log; sẽ ghi lại thông tin lỗi vào file error.log tại đường dẫn /var/log/nginx/, rewrite_log on; sẽ bật chế độ log cho các tác vụ rewrite.

Sau khi sửa lại, bạn cần khởi động lại dịch vụ Nginx để cấu hình mới được áp dụng bằng lệnh sudo systemctl restart nginx.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories