Trong bài viết này, chúng ta sẽ đi sâu vào lý do tại sao tải máy chủ tăng lên xảy ra và thảo luận về nhiều cách khác nhau để tối ưu hóa các quy trình tải cao. Chúng tôi sẽ đặc biệt chú ý đến việc tối ưu hóa mã trong Apache/Nginx và MySQL, chúng tôi sẽ nói về bộ nhớ đệm như một công cụ hỗ trợ và cũng xem xét các mối đe dọa bên ngoài có thể xảy ra, chẳng hạn như các cuộc tấn công DDOS và các cách để ngăn chặn chúng.
Tại sao xảy ra tình trạng tải máy chủ
Trước khi tiến hành tối ưu hóa máy chủ, cần phải tiến hành phân tích kỹ lưỡng về tải hiện tại trên các tài nguyên. Điều này bao gồm đo tải CPU, sử dụng RAM, hoạt động mạng và các thông số quan trọng khác. Hiểu được động lực và tải đỉnh cho phép xác định các nút thắt cổ chai và tối ưu hóa phân bổ tài nguyên, do đó tăng tính ổn định và hiệu suất của cơ sở hạ tầng máy chủ.
Để khắc phục sự cố ban đầu của tải máy chủ cao, chúng tôi khuyên bạn nên thực hiện chẩn đoán máy chủ chung. Nếu điều này là không đủ, một chi tiết hơn phân tích tài nguyên là cần thiết. Là một công cụ hỗ trợ, khám phá nhật ký của Linux Máy chủ có thể hữu ích vì đây là nơi phát hiện ra nguồn gốc của vấn đề trong hầu hết các trường hợp.
Tối ưu hóa máy chủ Apache/Nginx
Tăng tải máy chủ do lập chỉ mục
Tải tăng do lập chỉ mục trên máy chủ có thể xảy ra, ví dụ, khi các công cụ tìm kiếm quét một số lượng lớn các trang trên trang web của bạn. Điều này có thể dẫn đến việc sử dụng nhiều tài nguyên máy chủ hơn và do đó làm chậm hiệu suất của trang web. Việc xác định nguyên nhân tương đối đơn giản; bạn cần mở tệp nằm tại:
/var/www/httpd-logs/sitename.access.log
Khi được lập chỉ mục bởi các công cụ tìm kiếm, người dùng sẽ thấy các mục có nội dung sau:
11.22.33.44 - - [Date and Time] "GET /your-page-path HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Là giải pháp đầu tiên để giảm tải, bạn có thể sử dụng cài đặt thẻ meta "không lập chỉ mục" và "không theo dõi" trên các trang không cần phải lập chỉ mục. Giải pháp thứ hai là Htaccess. tệp, trong đó cần thêm các mục tương ứng với các công cụ tìm kiếm cụ thể, ví dụ, để ẩn khỏi Yandex và Google:
SetEnvIfNoCase User-Agent "^Yandex" search_bot SetEnvIfNoCase User-Agent "^Googlebot" search_bot Order Allow,Deny Allow from all Deny from env=search_bot
Tương tự như vậy, cần phải chỉnh sửa cho các công cụ tìm kiếm khác. Cần lưu ý rằng khả năng của .htaccess không chỉ giới hạn ở việc chặn lập chỉ mục. Chúng tôi khuyên bạn nên làm quen với các tính năng chính của nó trong bài viết .
Sử dụng Cài đặt Bộ nhớ đệm
Cài đặt bộ nhớ đệm không chính xác trên máy chủ cũng có thể dẫn đến tải cao. Để tối ưu hóa tham số này, cần thực hiện các thay đổi tương ứng trong các tệp cấu hình hoặc Htaccess.. Trong trường hợp của Apache, tùy chọn sau được ưu tiên hơn, còn đối với Nginx – thì tùy chọn trước.
Trên Apache máy chủ, bạn cần phải mở .htacess tập tin và chèn mã sau:
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$"> Header set Cache-Control "max-age=2592000" </FilesMatch>
Sau đó, bật hết hạn mô-đun bằng lệnh:
sudo a2enmod expires
Sau đó, khởi động lại máy chủ web:
sudo service apache2 restart
Và kích hoạt mô-đun bằng cách chỉ định:
ExpiresActive On
Trên một Nginx máy chủ, bạn chỉ cần thêm đoạn mã sau vào tệp cấu hình:
location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ { root /var/www/yoursite.com; }
Và thực hiện tải lại dịch vụ:
sudo service nginx restart
Lưu ý rằng với các thiết lập này, Cho phép và Từ chối chỉ thị sẽ bị bỏ qua.
Sử dụng nén dữ liệu
Cho phép nén dữ liệu bằng cách sử dụng Gzip trên máy chủ web Apache và Nginx giúp giảm lượng dữ liệu được truyền giữa máy chủ và máy khách, giúp cải thiện hiệu suất và giảm thời gian tải trang web.
Để kích hoạt Gzip on Apache, bạn cần kích hoạt sửa đổi mô-đun:
sudo a2enmod deflate
Sau đó, khởi động lại máy chủ web:
sudo service apache2 restart
Và cuối cùng, thêm khối sau vào tệp cấu hình hoặc .htaccess:
<IfModule mod_deflate.c> # Configure compression for specified file types AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json # If the browser matches the specified pattern, apply compression only to text/html files BrowserMatch ^Mozilla/4 gzip-only-text/html # If the browser matches the specified version patterns of Mozilla 4.0.6, 4.0.7, 4.0.8, disable compression BrowserMatch ^Mozilla/4\.0[678] no-gzip # If the browser is MSIE (Internet Explorer), disable compression for all files except text/html BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # If the request contains the specified pattern (extensions of image files), disable compression SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip </IfModule>
Cấu hình này cho phép nén một số loại tệp nhất định và vô hiệu hóa đối với hình ảnh.
Trong trường hợp Nginx, cấu hình xảy ra trong http khối của tệp cấu hình. Mã sau đây cần được thêm vào:
gzip on; gzip_disable "msie6"; # Adds the Vary header, indicating that the response may change depending on the Accept-Encoding header value gzip_vary on; # Enables compression for any proxy servers gzip_proxied any; # Sets the compression level. A value of 6 provides a good balance between compression efficiency and resource use gzip_comp_level 6; # Sets the size of the buffer for compressed data (16 buffers of 8 kilobytes each) gzip_buffers 16 8k; # Specifies that data compression should be used only for HTTP version 1.1 and higher gzip_http_version 1.1; # Sets the file types that can be compressed gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Tương tự như Apache, tại đây các tham số nén cho một số loại tệp nhất định được thiết lập. Sau khi thực hiện thay đổi đối với bất kỳ máy chủ web nào, cần phải tải lại dịch vụ:
sudo service apache2 restart
Or
sudo service nginx restart
Tấn công DDOS vào máy chủ
Tải máy chủ cao có thể xảy ra do một cuộc tấn công DDoS. Việc xác định sự hiện diện của một cuộc tấn công DDoS có thể được thực hiện thông qua việc theo dõi sự gia tăng đột ngột về lưu lượng truy cập, các yêu cầu bất thường và hiệu suất máy chủ giảm. Việc xem lại nhật ký để tìm các yêu cầu lặp lại từ một địa chỉ IP hoặc quét cổng cũng có thể chỉ ra một cuộc tấn công DDoS có thể xảy ra. Có nhiều biện pháp bảo vệ, nhưng chúng tôi sẽ chỉ thảo luận về những điều cơ bản.
Sử dụng CDN (Mạng phân phối nội dung). CDN có thể đóng vai trò trung gian giữa máy chủ web và người dùng, phân phối lưu lượng truy cập và lưu trữ nội dung để giảm thiểu tác động của cuộc tấn công DDoS. CDN cũng có thể có cơ chế bảo vệ DDoS tích hợp, bao gồm phân phối tải và lọc lưu lượng truy cập.
Cấu hình tường lửa và hệ thống phát hiện xâm nhập (IDS/IPS). Tường lửa có thể được cấu hình để lọc lưu lượng dựa trên nhiều tiêu chí khác nhau, chẳng hạn như địa chỉ IP và cổng. IDS/IPS có thể phát hiện hành vi lưu lượng bất thường và chặn các kết nối đáng ngờ. Các công cụ này có thể hiệu quả trong việc theo dõi và chặn lưu lượng có khả năng gây hại.
Cấu hình máy chủ web Apache và Nginx để giảm thiểu tác động của các cuộc tấn công DDoS.
Là một giải pháp cho Apache, chúng tôi cho phép mod_evasive module. Để thực hiện việc này, hãy bỏ chú thích hoặc thêm dòng sau vào httpd.conf or apache2.conf tập tin cấu hình:
LoadModule evasive20_module modules/mod_evasive.so
Trong cùng một tệp, bạn cần thêm khối cài đặt:
<IfModule mod_evasive20.c> # Hash table size for storing request information DOSHashTableSize 3097 # Number of requests to one page before activating protection DOSPageCount 2 DOSPageInterval 1 # Number of requests to all pages before activating protection DOSSiteCount 50 DOSSiteInterval 1 # Blocking period in seconds for IP addresses DOSBlockingPeriod 10 </IfModule>
Tương tự như vậy, chúng tôi kích hoạt giới hạn tốc độ mod mô-đun:
LoadModule ratelimit_module modules/mod_ratelimit.so
Và thêm cấu hình:
<IfModule mod_ratelimit.c> # Setting the output filter for rate limiting (Rate Limit) SetOutputFilter RATE_LIMIT # Beginning of the settings block for the location "/login" <Location "/login"> # Setting the environment variable rate-limit with a value of 1 SetEnv rate-limit 1 # Ending of the settings block for the location "/login" </Location> </IfModule>
Cấu hình cho Nginx tương tự như Apache. Trong nginx.conf tệp cấu hình, các chỉ thị sau đây cần được sử dụng:
http { ... # Defining a zone for connection limits limit_conn_zone $binary_remote_addr zone=addr:10m; # Defining a zone for request limits limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s; server { ... # Configuring connection limits limit_conn addr 10; # Configuring request limits limit_req zone=req_zone burst=5; ... } }
Sau khi thực hiện thay đổi cho từng dịch vụ, chúng cần được tải lại:
sudo systemctl restart apache2
Hoặc:
sudo systemctl restart nginx
Những ví dụ này chỉ cung cấp cấu hình cơ bản, có thể được điều chỉnh thêm tùy theo yêu cầu cụ thể và bản chất của các cuộc tấn công.
Tối ưu hóa truy vấn MySQL
Tối ưu hóa các truy vấn cơ sở dữ liệu MySQL trên máy chủ web có thể đạt được theo nhiều cách khác nhau và một trong số đó là cấu hình đúng tệp cấu hình. Thông thường, tệp này được đặt tên my.cnf or của tôi.ini và nằm ở /Vân vân/ or /etc/mysql/ thư mục. Bạn cần mở nó và thực hiện những thay đổi sau:
[mysqld] # Location of the file for recording slow queries. Be sure to replace it with your path log-slow-queries = /var/log/mariadb/slow_queries.log # Threshold time for considering slow queries (in seconds) long_query_time = 5 # Enabling recording of queries that do not use indexes log-queries-not-using-indexes = 1 # Disabling query caching query_cache_size = 0 query_cache_type = 0 query_cache_limit = 1M # Size of temporary tables tmp_table_size = 16M max_heap_table_size = 16M # Size of the thread cache thread_cache_size = 16 # Disabling name resolving skip-name-resolve = 1 # Size of the InnoDB buffer pool. Set to 50-70% of available RAM innodb_buffer_pool_size = 800M # Size of the InnoDB log file innodb_log_file_size = 200M
Chúng ta cũng hãy xem xét các khuyến nghị bổ sung có thể tạo điều kiện thuận lợi cho việc tương tác với cơ sở dữ liệu máy chủ:
- Sử dụng GIẢI THÍCH lệnh trước truy vấn SQL để phân tích quá trình thực thi của truy vấn. Điều này cho phép bạn có được kế hoạch thực thi cho truy vấn và xác định chỉ mục nào được sử dụng, bảng nào được quét, v.v.
- Chỉ mục tăng tốc tìm kiếm dữ liệu, do đó chỉ mục được thiết kế đúng có thể cải thiện đáng kể hiệu suất truy vấn. Chú ý đến các cột thường được sử dụng trong Ở ĐÂU or THAM GIA điều kiện.
- Tránh sử dụng LỰA CHỌN *. Chỉ xác định những cột thực sự cần thiết cho truy vấn của bạn, thay vì chọn tất cả các cột trong bảng.
- Tránh sử dụng các hàm trong Ở ĐÂU điều kiện. Sử dụng các hàm (chẳng hạn như THẤP HƠN, PHÍA TRÊN, LEFT, QUYỀN) trong Ở ĐÂU điều kiện có thể làm cho các chỉ mục trở nên vô dụng. Cố gắng tránh sử dụng trực tiếp chúng trong điều kiện.
- Sử dụng INNER JOIN nếu có thể, vì nó thường hiệu quả hơn. Ngoài ra, hãy đảm bảo rằng các cột tương ứng để tham gia có chỉ mục.
- Sử dụng LIMIT để hạn chế số lượng hàng trả về nếu bạn chỉ cần nhận một số lượng kết quả nhất định.
- Hãy cân nhắc lưu trữ kết quả truy vấn vào bộ nhớ đệm, đặc biệt là khi chúng hiếm khi thay đổi, để giảm tải cho máy chủ.
Máy chủ thư tạo ra tải trọng cao trên máy chủ
Trong phần này, chúng ta sẽ khám phá cách xác định máy chủ thư đang chịu tải cao và những bước nào có thể thực hiện để tối ưu hóa hoạt động của máy chủ, bao gồm kiểm tra hàng đợi tin nhắn và cấu hình các tham số máy chủ. Bắt đầu bằng cách kiểm tra hàng đợi tin nhắn. thưq tiện ích có thể giúp ích trong việc này, để kích hoạt nó, hãy nhập lệnh tương ứng vào terminal:
mailq
Thao tác này sẽ hiển thị danh sách các tin nhắn trong hàng đợi, nếu có. Mỗi tin nhắn sẽ được hiển thị với mã định danh duy nhất và thông tin về trạng thái gửi. Có thể thu được kết quả tương tự bằng cách xem lại nhật ký của máy khách thư.
Trong hầu hết các trường hợp, tải cao xảy ra trong trường hợp máy chủ bị xâm phạm khi nó bắt đầu gửi thư rác. Tuy nhiên, nếu sau khi kiểm tra, người quản trị tin chắc rằng máy chủ không bị tấn công từ bên ngoài và người dùng không bỏ qua thư rác, thì đã đến lúc chuyển sang tối ưu hóa máy chủ thư. Sau đây là các bước sẽ giúp ích:
- Đảm bảo rằng các bản ghi DNS của miền của bạn được cấu hình đúng, bao gồm SPF, phần mở rộng dkimvà DMARC hồ sơ để cải thiện việc gửi thư và bảo vệ chống lại thư rác. Cấu hình chính xác của các tham số có thể được tìm thấy trong bài viết về chẩn đoán máy chủ thư.
- Kiểm tra cài đặt mạng, bao gồm cấu hình tường lửa và quy tắc định tuyến, để tránh bị chặn và tăng tốc độ gửi thư.
- Cấu hình các tham số hàng đợi tin nhắn theo tải máy chủ. Điều này có thể bao gồm thiết lập kích thước hàng đợi tối đa và thời gian chờ.
- Hãy xem xét các giải pháp mà chúng tôi đã thảo luận trong bài viết này trước đó. Tối ưu hóa định kỳ cơ sở dữ liệu máy chủ thư để cải thiện hiệu suất, sử dụng cơ chế lưu trữ đệm để tăng tốc tìm kiếm và xử lý dữ liệu, chẳng hạn như truy vấn DNS.
- Nếu máy chủ thư vẫn thường xuyên gặp tình trạng tải cao, hãy cân nhắc các tùy chọn mở rộng quy mô, chẳng hạn như sử dụng cụm máy chủ thư hoặc giải pháp đám mây.
Kết luận
Tải máy chủ tăng ảnh hưởng trực tiếp đến tốc độ tải trang web, cuối cùng ảnh hưởng đến trải nghiệm người dùng và danh tiếng trên các công cụ tìm kiếm. Do đó, quản lý hiệu quả tải này đóng vai trò quan trọng trong việc đảm bảo chức năng liên tục của tài nguyên và tăng khả năng truy cập của tài nguyên cho khách truy cập.