Sử dụng nginx để tăng tốc cho Drupal

Billgate Nguyen nguồn bình luận 999
A- A A+
Hiện nay Apache là máy chủ web được dùng phổ biến nhất trên thế giới do tính đa dụng. Nhưng cũng vì hỗ trợ nhiều tính năng nên phần mềm này trở nên nặng nề và không thích hợp để chạy các ứng dụng đơn giản cần tốc độ cao. Bài viết sẽ hướng dẫn cài đặt nginx như là một bổ sung cho Apache.
Sử dụng nginx để tăng tốc cho Drupal
Ảnh minh họa

Thông thường Apache được cài đặt để nghe trên cổng 80 để đáp ứng các truy vấn http (và có thể nghe trên cổng 443 với https). Mỗi khi khách truy cập, sẽ có hàng chục, thậm chí hàng trăm truy vấn được gửi đến. Ngoài truy vấn chính, còn có rất nhiều truy vấn phụ để tải các hình ảnh, định dạng, mã lệnh... để hiển thị trên trình duyệt.

Việc dùng Apache để đáp ứng mọi truy vấn này không khác gì “dùng dao mổ trâu để giết gà”. Để giải quyết vấn đề này, cách phổ biến nhất là chạy một máy chủ web nhẹ cân như nginx, lighttpd ở một tên miền khác, còn Apache chạy ở tên miền chính, chỉ nhận các truy vấn chính. Chẳng hạn như YouTube sử dụng Apache ở máy chủ chính, lighttpd để đáp ứng javascript/css, và hai loại máy chủ riêng khác cho ảnh thumbnail và cho video.

Tuy nhiên, không thể chạy cùng lúc hai máy chủ web trên cùng một địa chỉ IP và cùng cổng 80. Trong trường hợp này, giải pháp thường được sử dụng là proxy nghịch. Proxy này sẽ chuyển các truy vấn khác nhau đến các máy chủ khác nhau nằm ở “hậu trường” trên các cổng khác nhau.

Các máy chủ web như Apache, nginx đều có khả năng làm proxy nghịch. Trong cấu hình này, chúng ta dùng nginx để phục vụ các yêu cầu thông thường, và chuyển các yêu cầu cần đến PHP sang Apache nghe trên cổng 81.

Đầu tiên, chúng ta cấu hình nginx trên cổng 80 và các tên miền www.example.com (chuyển các yêu cầu đến Apache) lẫn static.example.com (yêu cầu đến nội dung tĩnh). Trên tên miền static.example.com nếu không tìm thấy nội dung sẽ chuyển ngược về www.example.com (dùng cho Imagecache).

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

location / {
proxy_pass http://127.0.0.1:81;
}
}
server {
listen 80;
server_name static.example.com;
root /home/example/public_html;
expires 30d;

location / {
try_files $uri @redirect;
}

location @redirect {
rewrite ^(.*)$ http://www.example.com$1;
}
}

Tiếp đến, cấu hình cho Apache nghe trên cổng 81, và chỉ nghe trên giao diện 127.0.0.1 vì không muốn xử lí các truy vấn từ ngoài. Chúng ta muốn mọi truy vấn cần gián tiếp thông qua cổng 80.

Listen 127.0.0.1:81
<VirtualHost 127.0.0.1:81>
ServerName www.example.com
DocumentRoot /home/example/public_html
</VirtualHost>

Chúng ta cùng xem một số kết quả sau khi thay đổi. Cấu hình của Apache vẫn không đổi, dùng MPM Prefork, mod_fcgid, chỉ có thay đổi về IP và cổng. Cùng lúc chuyển sang nginx, nhóm phát triển có tối ưu MySQL nên không phải tất cả mọi thay đổi đều do nginx.

Trước đây tải rất bất ổn, sau đó thì trở nên ổn định ở mức rất thấp, chỉ bằng 10% đến 20% lúc trước.
CPU xử lí ít hơn, đồng thời hiệu suất đĩa tốt hơn (tỉ lệ iowait rất thấp)
Truy xuất đĩa được tối ưu.
Không có nhiều thay đổi về bộ nhớ sử dụng. Nhưng nginx ổn định hơn, không phụ thuộc vào lượng khách truy cập.
Truy xuất mạng nhiều hơn do dùng proxy. Nhưng không ảnh hưởng đến hiệu năng.
Bởi vì tải thấp hơn nên truy vấn PHP thực hiện nhanh hơn, do đó số lượng trung bình tại một thời điểm có giảm nhẹ. Cũng không có hiện tượng đôi khi quá tải như trước kia.
nginx dùng luồng thay cho tiến trình. Số tiến trình giữ giá trị ổn định.

Trên đây là cách cấu hình máy chủ, một trong những thao tác để tối ưu ứng dụng web. Chúc các bạn tăng tốc cho Drupal của mình!

Nguồn Tin:
Video và Bài nổi bật