Thứ hai, 13/04/2015 | 00:00 GMT+7

Cách cấu hình bộ đệm nội dung Apache trên CentOS 7


Bộ nhớ đệm là gì?

Bộ nhớ đệm là một phương pháp cải thiện hiệu suất server bằng cách cho phép tạm thời lưu trữ nội dung thường được yêu cầu theo cách cho phép truy cập nhanh hơn. Điều này tăng tốc độ xử lý và phân phối bằng cách cắt bỏ một số hoạt động sử dụng nhiều tài nguyên.

Bằng cách tạo các luật lưu vào bộ nhớ đệm hiệu quả, nội dung phù hợp với bộ nhớ đệm sẽ được lưu trữ để cải thiện thời gian phản hồi, tiết kiệm tài nguyên và giảm thiểu tải. Apache cung cấp nhiều bộ nhớ đệm phù hợp để tăng tốc các loại hoạt động khác nhau. Trong hướng dẫn này, ta sẽ thảo luận về cách cấu hình Apache 2.4 trên CentOS 7 bằng cách sử dụng các module bộ nhớ đệm khác nhau của nó.

Để tìm hiểu thêm về cách phát triển các chiến lược bộ nhớ đệm chung, hãy xem bài viết này .

Giới thiệu về bộ nhớ đệm trong Apache

Apache có thể lưu trữ nội dung với các mức độ phức tạp và khả năng mở rộng khác nhau. Dự án chia chúng thành ba group theo phương pháp mà nội dung được lưu vào bộ nhớ cache. Sự cố chung là:

  • Cache file : Chiến lược bộ nhớ đệm cơ bản nhất, điều này chỉ đơn giản là mở file hoặc bộ mô tả file khi server khởi động và giữ chúng ở trạng thái sẵn sàng để tăng tốc độ truy cập.
  • Bộ nhớ đệm key-value : Chủ yếu được sử dụng cho SSL và bộ nhớ đệm xác thực, bộ nhớ đệm key-value sử dụng mô hình đối tượng được chia sẻ có thể lưu trữ các mục tốn kém khi tính toán nhiều lần.
  • Bộ nhớ đệm HTTP tiêu chuẩn : Cơ chế bộ nhớ đệm linh hoạt và hữu ích nhất, hệ thống ba trạng thái này có thể lưu trữ các phản hồi và xác nhận chúng khi chúng hết hạn. Điều này có thể được cấu hình cho hiệu suất hoặc tính linh hoạt tùy thuộc vào nhu cầu cụ thể của bạn.

Xem nhanh các mô tả ở trên có thể thấy rằng các phương pháp trên có một số trùng lặp, nhưng cũng có thể hữu ích nếu sử dụng nhiều chiến lược cùng một lúc. Ví dụ: việc sử dụng kho key-value cho các phiên SSL của bạn và bật cache HTTP tiêu chuẩn cho các phản hồi có thể cho phép bạn giảm tải đáng kể các nguồn dữ liệu của bạn và tăng tốc nhiều hoạt động phân phối nội dung cho khách hàng của bạn.

Đến đây bạn đã hiểu rộng về từng cơ chế bộ nhớ đệm của Apache, hãy xem xét các hệ thống này chi tiết hơn.

Bộ nhớ đệm file

Tổng quan chung

  • Các module chính liên quan : mod_file_cache
  • Các trường hợp sử dụng chính : lưu trữ nội dung file hoặc bộ mô tả file khi server khởi động. Đây là những đại diện tĩnh không thể thay đổi một cách tin cậy cho đến khi server được khởi động lại.
  • Tính năng : đơn giản, cải thiện hiệu suất của hệ thống file chậm
  • Nhược điểm : tính năng thử nghiệm, không phản hồi các bản cập nhật trên hệ thống file , phải được sử dụng một cách tiết kiệm để phù hợp với giới hạn của hệ điều hành, chỉ được dùng trên các file tĩnh

Các chi tiết

Mô-đun mod_file_cache chủ yếu được sử dụng để tăng tốc độ truy cập file trên các server có hệ thống file chậm. Nó cung cấp sự lựa chọn của hai chỉ thị cấu hình, cả hai đều nhằm mục đích đẩy nhanh quá trình cung cấp file tĩnh bằng cách thực hiện một số công việc khi server được khởi động thay vì khi file được yêu cầu.

Chỉ thị CacheFile được sử dụng để chỉ định đường dẫn đến các file trên đĩa mà bạn muốn tăng tốc độ truy cập. Khi Apache được khởi động, Apache sẽ mở các file tĩnh đã được chỉ định và lưu vào cache xử lý file , tránh việc phải mở file khi được yêu cầu.Số lượng file có thể được mở theo cách này tùy thuộc vào các giới hạn do hệ điều hành của bạn đặt ra.

Lệnh MMapFile cũng mở file khi Apache được khởi động lần đầu. Tuy nhiên, MMapFile lưu nội dung của file vào bộ nhớ thay vì chỉ trình xử lý file . Điều này cho phép hiệu suất nhanh hơn cho các trang đó, nhưng nó có một số hạn chế nghiêm trọng. Nó không lưu trữ profile về dung lượng bộ nhớ mà nó đã sử dụng, vì vậy có thể hết bộ nhớ. Cũng lưu ý các tiến trình con sẽ sao chép bất kỳ bộ nhớ được cấp phát nào, điều này có thể dẫn đến cạn kiệt tài nguyên nhanh hơn bạn có thể dự đoán ban đầu. Chỉ sử dụng chỉ thị này một cách tiết kiệm.

Các chỉ thị này chỉ được đánh giá khi Apache khởi động. Điều này nghĩa là bạn không thể dựa vào Apache để nhận các thay đổi được thực hiện sau khi nó bắt đầu. Chỉ sử dụng chúng trên các file tĩnh sẽ không thay đổi trong suốt thời gian hoạt động của phiên Apache. Tùy thuộc vào cách các file được sửa đổi, server có thể được thông báo về các thay đổi, nhưng đây không phải là hành vi được mong đợi và không phải lúc nào cũng hoạt động chính xác. Nếu phải áp dụng các thay đổi đối với các file được chuyển đến các lệnh này, hãy khởi động lại Apache sau khi các thay đổi đã được thực hiện.

Cách bật cache file

Bộ nhớ đệm file được cung cấp bởi module mod_file_cache . Để sử dụng chức năng này, bạn cần kích hoạt module .

Khi chạy CentOS 7, module sẽ được cài đặt khi bạn cài đặt Apache, nhưng cấu hình mặc định không tải module . Để tải module , ta sẽ tạo một file đơn giản trong folder /etc/httpd/conf.modules.d của ta để tải module . Ta sẽ gọi file này là 00-cache.conf :

  • sudo nano /etc/httpd/conf.modules.d/00-cache.conf

Bên trong, ta cần sử dụng chỉ thị LoadModule để kích hoạt chức năng ta cần. Thêm dòng sau vào file :

/etc/httpd/conf.modules.d/00-cache.conf
LoadModule file_cache_module modules/mod_file_cache.so

Lưu file khi bạn hoàn tất.

Sau đó, bạn nên chỉnh sửa file cấu hình chính để cài đặt chỉ thị bộ nhớ đệm file của bạn . Mở file bằng lệnh :

  • sudo nano /etc/httpd/conf/httpd.conf

Để cài đặt bộ nhớ đệm xử lý file , hãy sử dụng lệnh CacheFile . Lệnh này có một danh sách các đường dẫn file , được phân tách bằng dấu cách, như sau:

/etc/httpd/conf/httpd.conf
CacheFile /var/www/html/index.html /var/www/html/somefile.index

Khi server được khởi động lại, Apache sẽ mở các file được liệt kê và lưu trữ các file xử lý của chúng trong cache để truy cập nhanh hơn.

Thay vào đó, nếu bạn muốn ánh xạ một vài file trực tiếp vào bộ nhớ, bạn có thể sử dụng chỉ thị MMapFile . Cú pháp của nó về cơ bản giống với chỉ thị cuối cùng, ở chỗ nó chỉ đơn giản lấy một danh sách các đường dẫn file :

/etc/httpd/conf/httpd.conf
MMapFile /var/www/html/index.html /var/www/html/somefile.index

Trong thực tế, sẽ không có lý do gì để cấu hình cả CacheFileMMapFile cho cùng một tập hợp file , nhưng bạn có thể sử dụng cả hai trên các group file khác nhau.

Khi hoàn tất, bạn có thể lưu và đóng các file . Kiểm tra cú pháp file cấu hình bằng lệnh :

  • sudo apachectl configtest

Nếu dòng cuối cùng ghi Syntax OK , bạn có thể khởi động lại version Apache của bạn một cách an toàn:

  • sudo systemctl restart httpd

Apache sẽ khởi động lại, lưu vào bộ nhớ đệm nội dung file hoặc trình xử lý tùy thuộc vào lệnh bạn đã sử dụng.

Bộ nhớ đệm giá trị chính

Tổng quan chung

  • Các module chính liên quan : mod_socache_dbm , mod_socache_dc , mod_socache_memcache , mod_socache_shmcb
  • Các module hỗ trợ liên quan : mod_authn_socache , mod_ssl
  • Các trường hợp sử dụng chính : lưu trữ các phiên SSL hoặc chi tiết xác thực, ghim SSL
  • Các tính năng : cache đối tượng được chia sẻ để lưu trữ các tài nguyên phức tạp, có thể hỗ trợ trong bộ nhớ đệm và ghim phiên SSL, backend linh hoạt
  • Nhược điểm : không có cơ chế xác thực, cần cấu hình phần mềm riêng biệt để có các phần mềm backend linh hoạt / hiệu quả hơn, một số lỗi trong mã

Các chi tiết

Bộ nhớ đệm key-value phức tạp hơn bộ nhớ đệm file và có nhiều lợi ích tập trung hơn. Còn gọi là cache đối tượng chia sẻ, cache giá trị khóa của Apache chủ yếu được sử dụng để tránh lặp lại các hoạt động tốn kém liên quan đến việc cài đặt quyền truy cập của khách hàng vào nội dung, trái ngược với chính nội dung. Cụ thể, nó được dùng để lưu các chi tiết xác thực trong bộ nhớ cache, các phiên SSL và cung cấp ghim SSL.

Ghi chú
Hiện tại, có một số vấn đề với mọi nhà cung cấp bộ nhớ cache đối tượng được chia sẻ. Tài liệu tham khảo về các vấn đề sẽ được nêu dưới đây. Hãy xem xét những điều này khi đánh giá xem có nên bật tính năng này hay không.

Bộ nhớ đệm thực tế được thực hiện thông qua việc sử dụng một trong các module của nhà cung cấp bộ nhớ đệm đối tượng được chia sẻ. Đó là:

  • mod_socache_dbm : Phần backend này sử dụng công cụ database dbm đơn giản, là một repository key-value dựa trên file sử dụng các group băm và kích thước cố định. Nhà cung cấp này gặp phải một số lỗi rò rỉ bộ nhớ, vì vậy trong hầu hết các trường hợp, bạn nên sử dụng mod_socache_shmcb để thay thế.
  • mod_socache_dc : Nhà cung cấp này sử dụng phần mềm cache phiên distcache. Dự án này đã không được cập nhật kể từ năm 2004 và thậm chí không được đóng gói cho một số bản phân phối, vì vậy hãy sử dụng với liều lượng hợp lý.
  • mod_socache_memcache : Điều này sử dụng cache đối tượng bộ nhớ phân tán memcache để lưu trữ các mục. Đây là tùy chọn tốt nhất cho cache phân tán giữa nhiều server . Hiện tại, nó không hết hạn chính xác các mục nhập, nhưng một bản vá đã được commit cho thân cây kiểm soát version của Apache để khắc phục sự cố.
  • mod_socache_shmcb : Hiện tại, đây là tùy chọn tốt nhất cho bộ nhớ đệm key-value . Cache này lưu vào cache tuần hoàn trong bộ nhớ dùng chung, cache này sẽ xóa các mục nhập khi nó đầy. Nó hiện đang làm nghẹt các mục có kích thước trên 11k .

Cùng với các module nhà cung cấp ở trên, các module bổ sung sẽ được yêu cầu tùy thuộc vào các đối tượng được lưu trong bộ nhớ đệm. Ví dụ, để phiên SSL bộ nhớ cache hoặc để cấu hình SSL dập ghim, mod_ssl phải được cho phép, mà sẽ cung cấp các SSLSessionCacheSSLStaplingCache chỉ thị tương ứng. Tương tự, để cài đặt bộ nhớ đệm xác thực, module mod_authn_socache phải được bật để có thể đặt chỉ thị AuthnCacheSOCache .

Cách bật bộ nhớ đệm giá trị khóa

Với các lỗi và lưu ý ở trên, nếu bạn vẫn muốn cấu hình loại bộ nhớ đệm này trong Apache, hãy làm theo bên dưới.

Phương pháp được sử dụng để cài đặt cache key-value sẽ phụ thuộc vào nó sẽ được sử dụng để làm gì và bạn đang sử dụng nhà cung cấp nào. Ta sẽ xem xét những điều cơ bản về cả bộ nhớ đệm xác thực và bộ nhớ đệm phiên SSL bên dưới.

Hiện tại, có một lỗi với bộ nhớ đệm xác thực ngăn việc truyền các đối số đến nhà cung cấp cache .Vì vậy, bất kỳ nhà cung cấp nào không cung cấp cài đặt mặc định để sử dụng lại sẽ có vấn đề.

Xác thực Cache

Bộ nhớ đệm xác thực rất hữu ích nếu bạn đang sử dụng phương pháp xác thực đắt tiền, chẳng hạn như LDAP hoặc xác thực database . Các loại hoạt động này có thể có tác động đáng kể đến hiệu suất nếu phần backend phải được thực hiện mỗi khi yêu cầu xác thực được thực hiện.

Cài đặt bộ nhớ đệm bao gồm việc sửa đổi cấu hình xác thực hiện có của bạn ( ta sẽ không đề cập đến cách cài đặt xác thực trong hướng dẫn này). Bản thân các sửa đổi sẽ giống nhau dù phương pháp xác thực backend là gì. Ta sẽ sử dụng mod_socache_shmcb để trình diễn. Mô-đun này đã được bật trong file /etc/httpd/conf.modules.d/00-base.conf của ta .

Mở file cấu hình Apache chính của bạn để bạn có thể chỉ định phần backend cache được chia sẻ này để sử dụng với xác thực:

  • sudo nano /etc/httpd/conf/httpd.conf

Bên trong, ở phía trên cùng của file , thêm chỉ thị AuthnCacheSOCache . Chỉ định rằng shmcb nên được sử dụng làm trình cung cấp. Nếu lỗi được thảo luận trước đó về việc ngăn chặn việc truyền tùy chọn được khắc phục vào thời điểm bạn đọc phần này, bạn có thể chỉ định vị trí và kích thước cho bộ nhớ cache. Số tính bằng byte, vì vậy ví dụ được comment sẽ dẫn đến bộ nhớ cache 512 kilobyte:

/etc/httpd/conf/httpd.conf
AuthnCacheSOCache shmcb

# If the bug preventing passed arguments to the provider gets fixed,
# you can customize the location and size like this
#AuthnCacheSOCache shmcb:${APACHE_RUN_DIR}/auth_cache(512000)

Lưu file khi bạn hoàn tất.

Tiếp theo, mở trang cấu hình server ảo của bạn đã được cấu hình xác thực. Ta sẽ giả sử bạn đang sử dụng cấu hình server ảo có tên site.conf nằm trong folder /etc/httpd/conf.d , nhưng bạn nên sửa đổi nó để phản ánh môi trường của bạn:

  • sudo nano /etc/httpd/conf.d/site.conf

Một server ảo cơ bản được cài đặt với xác thực có thể trông giống như sau:

/etc/httpd/conf.d/site.conf
<VirtualHost *:80>
    ServerName server_domain_or_IP
    DocumentRoot /var/www/html

    <Directory /var/www/html/private>
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /etc/httpd/.htpasswd
        AuthBasicProvider file
        Require valid-user
    </Directory>
</VirtualHost>

Ở vị trí mà bạn đã cấu hình xác thực, hãy sửa đổi khối để thêm bộ nhớ đệm. Cụ thể, bạn cần thêm AuthnCacheProvideFor để cho nó biết nguồn xác thực nào cần lưu vào cache , thêm thời gian chờ cache với AuthnCacheTimeout và thêm bộ socache vào danh sách AuthBasicProvider trước phương pháp xác thực thông thường của bạn. Kết quả trông như sau :

/etc/httpd/conf.d/site.conf
<VirtualHost *:80>
    ServerName server_domain_or_IP
    DocumentRoot /var/www/html

    <Directory /var/www/html/private>
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /etc/apache/.htpasswd
        AuthBasicProvider socache file
        AuthnCacheProvideFor file
        AuthnCacheTimeout 300
        Require valid-user
    </Directory>
</VirtualHost>

Ví dụ trên là để xác thực file , điều này có thể sẽ không được hưởng lợi nhiều từ bộ nhớ đệm. Tuy nhiên, việc cấy ghép phải rất giống khi sử dụng các phương pháp xác thực khác. Sự khác biệt đáng kể duy nhất sẽ là nơi đặc tả "tệp" trong ví dụ trên, phương pháp xác thực khác sẽ được sử dụng thay thế.

Lưu và đóng file . Kiểm tra các thay đổi để tìm lỗi cú pháp bằng lệnh :

  • sudo apachectl configtest

Nếu không tìm thấy lỗi cú pháp nào, hãy khởi động lại Apache để áp dụng các thay đổi trong bộ nhớ đệm của bạn:

  • sudo systemctl restart httpd

Bộ nhớ đệm phiên SSL

Việc bắt tay phải được thực hiện để cài đặt kết nối SSL mang lại chi phí đáng kể. Do đó, việc lưu vào bộ nhớ đệm dữ liệu phiên để tránh bước khởi tạo này cho các yêu cầu khác có thể có khả năng tránh được hình phạt này. Bộ nhớ cache đối tượng được chia sẻ là một nơi hoàn hảo cho việc này.

Nếu bạn đã cấu hình SSL cho server Apache của bạn , mod_ssl sẽ được bật (nếu không, hãy sử dụng yum để cài đặt module mod_ssl ). Trên CentOS 7, điều này nghĩa là file ssl.conf sẽ có sẵn trong folder /etc/httpd/conf.d . Điều này thực sự đã cài đặt bộ nhớ đệm. Bên trong, bạn sẽ thấy một số dòng như thế này:

/etc/httpd/conf.d/ssl.conf
. . .

SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300

. . .

Điều này thực sự đủ để cài đặt bộ nhớ đệm phiên. Để kiểm tra điều này, bạn có thể sử dụng ứng dụng client kết nối của OpenSSL. Kiểu:

  • openssl s_client -connect 127.0.0.1:443 -reconnect -no_ticket | grep Session-ID

Nếu ID phiên giống nhau trong tất cả các kết quả, thì cache phiên của bạn đang hoạt động chính xác. Nhấn CTRL-C để thoát trở lại terminal .

Cache HTTP tiêu chuẩn

Tổng quan chung

  • Các module chính liên quan : mod_cache
  • Các module hỗ trợ liên quan : mod_cache_disk , mod_cache_socache
  • Các trường hợp sử dụng chính : Lưu vào cache nội dung chung
  • Các tính năng : Có thể diễn giải chính xác các tiêu đề bộ nhớ đệm HTTP, có thể xác thực lại các mục nhập cũ, có thể được triển khai với tốc độ tối đa hoặc tính linh hoạt tùy thuộc vào nhu cầu của bạn
  • Hạn chế : Có thể rò rỉ dữ liệu nhạy cảm nếu được cấu hình không chính xác, phải sử dụng các module bổ sung để đặt policy bộ nhớ đệm một cách chính xác

Các chi tiết

Giao thức HTTP khuyến khích và cung cấp các cơ chế cho các phản hồi trong bộ nhớ đệm dọc theo đường phân phối nội dung. Bất kỳ máy tính nào chạm vào nội dung đều có thể lưu vào bộ nhớ đệm từng mục trong một khoảng thời gian nhất định tùy thuộc vào policy bộ nhớ đệm được đặt ra ở nguồn root của nội dung và luật bộ nhớ đệm của riêng máy tính.

Cơ chế lưu vào bộ nhớ đệm HTTP của Apache lưu vào bộ nhớ đệm các phản hồi theo policy bộ nhớ đệm HTTP mà nó thấy. Đây là một hệ thống bộ nhớ đệm mục đích chung tuân theo các luật tương tự mà bất kỳ server trung gian nào sẽ tuân theo có liên quan đến việc phân phối. Điều này làm cho hệ thống này trở nên rất linh hoạt và mạnh mẽ và cho phép bạn tận dụng các tiêu đề mà bạn đã nên đặt trên nội dung của bạn ( ta sẽ trình bày cách thực hiện điều này bên dưới).

Cache HTTP của Apache còn gọi là cache “ba trạng thái”. Điều này là do nội dung nó đã lưu trữ có thể ở một trong ba trạng thái. Nó có thể mới, nghĩa là nó được phép cung cấp cho khách hàng mà không cần kiểm tra thêm, nó có thể cũ, nghĩa là TTL trên nội dung đã hết hạn hoặc nó có thể không tồn tại nếu nội dung không được tìm thấy trong bộ nhớ cache .

Nếu nội dung trở nên cũ, ở lần yêu cầu tiếp theo, bộ nhớ đệm có thể xác thực lại bằng cách kiểm tra nội dung tại nguồn root . Nếu không thay đổi, nó có thể đặt lại ngày làm mới và phân phát nội dung hiện tại. Nếu không, nó tìm nạp nội dung đã thay đổi và lưu trữ nội dung đó trong repository ảng thời gian được policy bộ nhớ đệm của nó cho phép.

Tổng quan về module

Logic bộ nhớ đệm HTTP có sẵn thông qua module mod_cache . Bộ nhớ đệm thực tế được thực hiện với một trong những nhà cung cấp bộ nhớ đệm. Thông thường, bộ nhớ đệm được lưu trữ trên đĩa bằng module mod_cache_disk , nhưng bộ nhớ đệm đối tượng được chia sẻ cũng có sẵn thông qua module mod_cache_socache .

Mô-đun mod_cache_disk lưu vào bộ nhớ đệm trên đĩa, vì vậy nó có thể hữu ích nếu bạn đang ủy quyền nội dung từ xa , tạo nó từ một quy trình động hoặc chỉ cố gắng tăng tốc mọi thứ bằng cách lưu vào bộ nhớ đệm trên đĩa nhanh hơn nội dung của bạn thường nằm trên đó. Đây là nhà cung cấp được thử nghiệm tốt nhất và có lẽ nên là lựa chọn đầu tiên của bạn trong hầu hết các trường hợp. Bộ nhớ đệm không được làm sạch tự động, do đó, thỉnh thoảng phải chạy một công cụ có tên là htcacheclean để làm mỏng bộ nhớ cache. Điều này có thể được chạy theo cách thủ công, được cài đặt như một cron việc cron thông thường hoặc chạy như một daemon.

Mô-đun mod_cache_socache lưu vào bộ nhớ cache vào một trong những trình cung cấp đối tượng được chia sẻ (những trình cung cấp tương tự được thảo luận trong phần trước).Điều này có thể có hiệu suất tốt hơn mod_cache_disk (tùy thuộc vào nhà cung cấp bộ nhớ cache được chia sẻ được chọn). Tuy nhiên, nó mới hơn nhiều và phụ thuộc vào các nhà cung cấp đối tượng được chia sẻ, có các lỗi đã được thảo luận trước đó. Nên kiểm tra toàn diện trước khi triển khai tùy chọn mod_cache_socache .

Vị trí bộ nhớ đệm HTTP

Cache HTTP của Apache có thể được triển khai ở hai cấu hình khác nhau tùy thuộc vào nhu cầu của bạn.

Nếu CacheQuickHandler được đặt thành “bật”, cache sẽ được kiểm tra rất sớm trong quá trình xử lý yêu cầu. Nếu nội dung được tìm thấy, nội dung đó sẽ được phân stream mà không cần xử lý thêm. Điều này nghĩa là nó cực kỳ nhanh chóng, nhưng nó cũng nghĩa là nó không cho phép các quá trình như xác thực nội dung. Nếu có nội dung trong bộ nhớ cache của bạn thường yêu cầu xác thực hoặc kiểm soát truy cập, thì bất kỳ ai cũng có thể truy cập nội dung đó mà không cần xác thực nếu CacheQuickHandler được đặt thành “bật”.

Về cơ bản, điều này mô phỏng một bộ nhớ cache riêng biệt phía trước web server của bạn. Nếu web server của bạn cần thực hiện bất kỳ loại kiểm tra, xác thực hoặc ủy quyền có điều kiện nào, điều này sẽ không xảy ra. Apache thậm chí sẽ không đánh giá các chỉ thị trong các khối <Location> hoặc <Directory> . Lưu ý CacheQuickHandler được đặt thành “bật” theo mặc định !

Nếu CacheQuickHandler được đặt thành “tắt”, bộ nhớ cache sẽ được kiểm tra đáng kể sau đó trong trình tự xử lý yêu cầu. Hãy coi cấu hình này giống như việc đặt cache giữa logic xử lý Apache và nội dung thực tế của bạn. Điều này sẽ cho phép các lệnh xử lý thông thường được chạy trước khi truy xuất nội dung từ bộ nhớ cache. Đặt cài đặt này thành “tắt” sẽ làm giảm tốc độ một chút để có khả năng xử lý các yêu cầu sâu hơn.

Cách cấu hình cache HTTP chuẩn

Để bật bộ nhớ đệm, bạn cần bật module mod_cache cũng như một trong các nhà cung cấp bộ nhớ đệm của nó. Như ta đã nêu ở trên, mod_cache_disk được thử nghiệm tốt, vì vậy ta sẽ dựa vào đó.

Cài đặt htcacheclean để tự động quản lý bộ nhớ đệm

Trên hệ thống CentOS 7, tiện ích htcacheclean , được sử dụng để giảm bớt bộ nhớ cache khi nó phát triển, được cài đặt trong quá trình cài đặt httpd . Theo mặc định, file đơn vị systemd được gọi là htcacheclean.service được bao gồm.

Nếu bạn định cài đặt bộ nhớ đệm, bạn nên cấu hình dịch vụ này để chạy tự động. Tệp dịch vụ thực sự daemonized dịch vụ, chạy hoạt động dọn dẹp ở một khoảng thời gian có thể cấu hình . Tuy nhiên, theo mặc định, không có cơ chế khởi động nó khi Apache khởi động.

Để cài đặt điều này, ta sẽ tạo một folder có tên là httpd.service.requires trong folder /etc/systemd/system . Điều này được dùng để chỉ định các phụ thuộc của file đơn vị httpd.service khởi động Apache:

  • sudo mkdir -p /etc/systemd/system/httpd.service.requires

Sau đó, ta có thể liên kết file đơn vị htcacheclean.service vào folder này. Điều này sẽ làm cho dịch vụ htcacheclean khởi động và làm sạch bộ nhớ cache trong repository ảng thời gian đều đặn khi Apache được khởi động:

sudo ln -s /usr/lib/systemd/system/htcacheclean.service /etc/systemd/system/httpd.service.requires

Bạn có thể cấu hình các tùy chọn htcacheclean , bao gồm cả khoảng thời gian làm sạch, bằng cách chỉnh sửa file htcacheclean trong folder /etc/sysconfig :

sudo nano /etc/sysconfig/htcacheclean

Tại đây, bạn có thể sửa đổi khoảng thời gian làm sạch, root bộ nhớ cache, kích thước bộ nhớ cache tối đa và bất kỳ tùy chọn nào khác cho tiện ích:

/ etc / sysconfig / htcacheclean
INTERVAL=15
CACHE_ROOT=/var/cache/httpd/proxy
LIMIT=100M
OPTIONS=

Ghi chú
Lưu ý nếu bạn thay đổi giá trị của CACHE_ROOT , bạn cần điều chỉnh giá trị của chỉ thị CacheRoot mà ta sẽ đặt trong cấu hình Apache của bạn .

Khi bạn hoàn tất, hãy lưu file .

Khởi động lại Apache để khởi động htcacheclean để tự động làm sạch bộ nhớ cache:

sudo systemctl restart httpd

Sửa đổi cấu hình chung

Hầu hết cấu hình cho bộ nhớ đệm sẽ diễn ra trong các định nghĩa server ảo hoặc khối vị trí riêng lẻ. Tuy nhiên, cũng có một số mục cấu hình chung nên được sử dụng để cài đặt một số thuộc tính chung. Mở file cấu hình Apache chính của bạn để cấu hình các mục sau:

  • sudo nano /etc/httpd/conf/httpd.conf

Ta cần thêm thư CacheRoot để trỏ đến đường dẫn sẽ được sử dụng để lưu trữ các mục đã lưu trong bộ nhớ cache của ta . Giá trị này phải luôn trùng với giá trị CACHE_ROOT được tìm thấy trong file /etc/sysconfig/htcacheclean để bộ nhớ cache có thể được quản lý chính xác. Ta cũng sẽ cài đặt các CacheDirLevelsCacheDirLength chỉ thị, mà cả hai đóng góp xác định như thế nào cấu trúc folder bộ nhớ cache sẽ được xây dựng:

/etc/httpd/conf/httpd.conf
CacheRoot /var/cache/httpd/proxy
CacheDirLevels 2
CacheDirLength 1

Cả CacheDirLevelsCacheDirLength đều góp phần xác định cách cấu trúc folder cache sẽ được xây dựng. Một băm md5 của URL đang được phân phát sẽ được tạo làm khóa dùng để lưu trữ dữ liệu. Dữ liệu sẽ được tổ chức thành các folder bắt nguồn từ các ký tự đầu của mỗi hàm băm. CacheDirLevels chỉ định số lượng folder con để tạo và CacheDirLength chỉ định số lượng ký tự để sử dụng làm tên của mỗi folder . Vì vậy, một băm của b1946ac92492d2347c6235b4d2611184 với các giá trị mặc định được hiển thị ở trên sẽ được lưu trữ trong cấu trúc folder của b/1/946ac92492d2347c6235b4d2611184 . Thông thường, bạn sẽ không cần phải sửa đổi các giá trị này, nhưng thật tốt khi biết chúng được sử dụng để làm gì.

Một số giá trị khác mà bạn có thể đặt trong file này là CacheMaxFileSizeCacheMinFileSize đặt phạm vi kích thước file tính bằng byte mà Apache sẽ commit vào cache , cũng như CacheReadSizeCacheReadTime , cho phép bạn đợi và đệm nội dung trước khi gửi đến client . Điều này có thể hữu ích nếu nội dung nằm ở một nơi nào đó khác với server này.

Sửa đổi server ảo

Hầu hết cấu hình cho bộ nhớ đệm sẽ diễn ra ở mức chi tiết hơn, trong định nghĩa server ảo hoặc trong một khối vị trí cụ thể.

Mở một trong các file server ảo của bạn để theo dõi. Ta sẽ giả sử bạn đang sử dụng file có tên site.conf trong folder /etc/httpd/conf.d của bạn trong hướng dẫn này:

  • sudo nano /etc/httpd/conf.d/site.conf

Trong khối server ảo, bên ngoài bất kỳ khối vị trí nào, ta có thể bắt đầu cấu hình một số thuộc tính bộ nhớ đệm. Trong hướng dẫn này, ta sẽ giả định ta muốn tắt CacheQuickHandler để quá trình xử lý được thực hiện nhiều hơn. Điều này cho phép ta cài đặt các luật bộ nhớ đệm hoàn chỉnh hơn.

Ta cũng sẽ tận dụng cơ hội này để cấu hình khóa bộ nhớ cache. Đây là hệ thống khóa file mà Apache sẽ sử dụng khi kiểm tra nguồn root nội dung để xem liệu nội dung có còn hợp lệ hay không. Trong thời gian khi truy vấn này được đáp ứng, nếu các yêu cầu bổ sung cho cùng một nội dung đến, nó sẽ dẫn đến các yêu cầu bổ sung đối với tài nguyên backend , điều này có thể gây ra tăng đột biến tải.

Đặt khóa bộ nhớ cache cho một tài nguyên trong quá trình xác thực cho Apache biết rằng tài nguyên hiện đang được làm mới. Trong thời gian này, tài nguyên cũ có thể được cung cấp với tiêu đề cảnh báo cho biết trạng thái của nó. Ta sẽ cài đặt điều này với một folder khóa bộ nhớ cache trong folder /tmp . Ta sẽ cho phép tối đa 5 giây để khóa được coi là hợp lệ. Những ví dụ này được lấy trực tiếp từ tài liệu của Apache, vì vậy chúng sẽ hoạt động tốt cho các mục đích của ta .

Ta cũng sẽ yêu cầu Apache bỏ qua tiêu đề Set-Cookie và không lưu trữ chúng trong bộ nhớ cache. Làm như vậy sẽ ngăn Apache vô tình làm rò rỉ cookie của user cụ thể cho các bên khác. Tiêu đề Set-Cookie sẽ bị loại bỏ trước khi tiêu đề được lưu vào bộ nhớ đệm.

/etc/httpd/conf.d/site.conf
<VirtualHost *:80>
    ServerName server_domain_or_IP
    DocumentRoot /var/www/html

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie
</VirtualHost>

Ta vẫn cần thực sự bật bộ nhớ đệm cho server ảo này. Ta có thể thực hiện điều này với chỉ thị CacheEnable . Nếu đây được đặt trong một khối server ảo, ta cần phải cung cấp các phương pháp bộ nhớ đệm ( disk hoặc socache ) cũng như các URI yêu cầu nên được lưu trữ. Ví dụ: để lưu vào bộ nhớ cache tất cả các phản hồi, điều này có thể được đặt thành CacheEnable disk / , nhưng nếu bạn chỉ muốn lưu các phản hồi vào bộ nhớ cache trong URI /public , bạn có thể đặt nó thành CacheEnable disk /public .

Ta sẽ thực hiện một cách tiếp cận khác bằng cách bật bộ nhớ cache của ta trong một khối vị trí cụ thể. Làm như vậy nghĩa là ta không phải cung cấp một đường dẫn URI đến lệnh CacheEnable . Mọi URI sẽ được phân phát từ vị trí đó sẽ được lưu vào bộ nhớ đệm. Ta cũng sẽ bật chỉ thị CacheHeader để tiêu đề phản hồi của ta sẽ cho biết liệu bộ nhớ cache có được sử dụng để phục vụ yêu cầu hay không.

Một chỉ thị khác mà ta sẽ đặt là CacheDefaultExpire để ta có thể đặt thời hạn (tính bằng giây) nếu cả tiêu đề Expires hoặc Last-Modified đều không được đặt trên nội dung. Tương tự, ta sẽ đặt CacheMaxExpire giới hạn lượng thời gian các mục sẽ được lưu. Ta sẽ đặt CacheLastModifiedFactor để Apache có thể tạo ngày hết hạn nếu nó có ngày Last-Modified , nhưng không có ngày hết hạn. Hệ số được nhân với thời gian kể từ khi sửa đổi để đặt thời hạn hợp lý.

/etc/httpd/conf.d/site.conf
<VirtualHost *:80>
    ServerName server_domain_or_IP
    DocumentRoot /var/www/html

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie

    <Location />
        CacheEnable disk
        CacheHeader on

        CacheDefaultExpire 600
        CacheMaxExpire 86400
        CacheLastModifiedFactor 0.5
    </Location>
</VirtualHost>

Lưu file của bạn khi bạn đã cấu hình mọi thứ bạn cần.

Kiểm tra toàn bộ cấu hình của bạn để tìm lỗi cú pháp bằng lệnh :

  • sudo apachectl configtest

Nếu không có lỗi nào được báo cáo, hãy khởi động lại dịch vụ của bạn bằng lệnh :

  • sudo systemctl restart httpd

Đặt tiêu đề hết hạn và lưu vào bộ nhớ đệm trên nội dung

Trong cấu hình trên, ta đã cấu hình bộ nhớ đệm HTTP, dựa trên tiêu đề HTTP. Tuy nhiên, không có nội dung nào ta đang cung cấp thực sự có tiêu đề Expires hoặc Cache-Control cần thiết để đưa ra quyết định lưu vào bộ nhớ đệm thông minh. Để đặt các tiêu đề này, ta cần tận dụng thêm một vài module .

Mô-đun mod_expires có thể đặt cả tiêu đề Expires và tùy chọn max-age trong tiêu đề Cache-Control . Mô-đun mod_headers được dùng để thêm các tùy chọn Cache-Control cụ thể hơn để điều chỉnh policy bộ nhớ đệm hơn nữa. Cả hai module này đều được bật theo mặc định trong gói CentOS 7 Apache.

Ta có thể đi thẳng đến việc sửa đổi lại file server ảo của bạn để bắt đầu cấu hình các mục sau:

  • sudo nano /etc/httpd/conf.d/site.conf

Mô-đun mod_expires chỉ cung cấp ba chỉ thị. ExpiresActive bật xử lý hết hạn trong một ngữ cảnh nhất định bằng cách đặt nó thành “bật”. Hai chỉ thị còn lại rất giống nhau. Lệnh ExpiresDefault đặt thời gian hết hạn mặc định và ExpiresByType đặt thời gian hết hạn theo kiểu MIME của nội dung. Cả hai điều này sẽ đặt ExpiresCache-Control “max-age” thành các giá trị chính xác.

Hai cài đặt này có thể có hai cú pháp khác nhau. Đầu tiên chỉ đơn giản là “A” hoặc “M” sau đó là một số giây. Điều này đặt thời hạn tương ứng với lần cuối cùng nội dung được “truy cập” hoặc “sửa đổi” tương ứng. Ví dụ: cả hai điều này sẽ hết hạn nội dung 30 giây sau khi nó được truy cập.

ExpiresDefault A30
ExpireByType text/html A30

Cú pháp khác cho phép cấu hình chi tiết hơn. Nó cho phép bạn sử dụng các đơn vị khác ngoài giây để con người dễ tính toán hơn. Nó cũng sử dụng từ đầy đủ "truy cập" hoặc "sửa đổi". Toàn bộ cấu hình hết hạn phải được giữ trong dấu ngoặc kép, như sau:

ExpiresDefault "modification plus 2 weeks 3 days 1 hour"
ExpiresByType text/html "modification plus 2 weeks 3 days 1 hour"

Đối với mục đích của ta , ta sẽ chỉ đặt thời hạn mặc định. Ta sẽ bắt đầu bằng cách đặt nó thành 5 phút để nếu ta mắc lỗi trong khi làm quen, nó sẽ không được lưu trữ trên máy tính của khách hàng của ta trong một thời gian dài. Khi ta tự tin hơn vào khả năng lựa chọn các policy phù hợp với nội dung của bạn , ta có thể điều chỉnh điều này thành một cái gì đó linh hoạt hơn:

/etc/httpd/conf.d/site.conf
<VirtualHost *:80>
    ServerName server_domain_or_IP
    DocumentRoot /var/www/html

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie

    <Location />
        CacheEnable disk
        CacheHeader on

        CacheDefaultExpire 600
        CacheMaxExpire 86400
        CacheLastModifiedFactor 0.5

        ExpiresActive on
        ExpiresDefault "access plus 5 minutes"
    </Location>
</VirtualHost>

Điều này sẽ đặt tiêu đề Expires của ta thành năm phút trong tương lai và đặt Cache-Control max-age=300 . Để tinh chỉnh thêm policy bộ nhớ đệm, ta có thể sử dụng lệnh Header . Ta có thể sử dụng tùy chọn merge để thêm các tùy chọn Cache-Control bổ sung. Bạn có thể gọi điều này nhiều lần và thêm bất kỳ policy bổ sung nào bạn muốn. Xem hướng dẫn này để biết ý tưởng về các policy bộ nhớ đệm mà bạn muốn đặt cho nội dung của bạn . Đối với ví dụ của ta , ta sẽ chỉ đặt "công khai" để các bộ nhớ đệm khác có thể chắc chắn rằng chúng được phép lưu trữ các bản sao.

Để đặt ETags cho nội dung tĩnh trên trang web của ta (sử dụng để xác thực), ta có thể sử dụng lệnh FileETag . Điều này sẽ hoạt động đối với nội dung tĩnh. Đối với nội dung được tạo động, ứng dụng của bạn sẽ chịu trách nhiệm tạo ETags một cách chính xác.

Ta có thể sử dụng chỉ thị để cài đặt các thuộc tính mà Apache sẽ sử dụng để tính toán Etag . Đây có thể là INode , MTime , Size hoặc All tùy thuộc vào việc ta muốn sửa đổi ETag khi nào inode của file thay đổi, thời gian sửa đổi thay đổi, kích thước thay đổi hoặc tất cả những điều trên. Bạn có thể cung cấp nhiều giá trị và bạn có thể sửa đổi cài đặt kế thừa trong ngữ cảnh con bằng cách đặt trước cài đặt mới bằng dấu + hoặc - . Vì mục đích của ta , ta sẽ chỉ sử dụng “tất cả” để tất cả các thay đổi được đăng ký:

/etc/httpd/conf.d/site.conf
<VirtualHost *:80>
    ServerName server_domain_or_IP
    DocumentRoot /var/www/html

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie

    <Location />
        CacheEnable disk
        CacheHeader on

        CacheDefaultExpire 600
        CacheMaxExpire 86400
        CacheLastModifiedFactor 0.5

        ExpiresActive on
        ExpiresDefault "access plus 5 minutes"

        Header merge Cache-Control public
        FileETag All
    </Location>
</VirtualHost>

Điều này sẽ thêm “công khai” (phân tách bằng dấu phẩy) vào bất kỳ giá trị nào mà Cache-Control đã có và sẽ bao gồm ETag cho nội dung tĩnh của ta .

Khi bạn hoàn tất, hãy lưu file . Kiểm tra cú pháp của các thay đổi bằng lệnh :

  • sudo apachectl configtest

Nếu không tìm thấy lỗi nào, hãy khởi động lại dịch vụ của bạn để triển khai các policy bộ nhớ đệm:

  • sudo systemctl restart httpd

Kết luận

Cấu hình bộ nhớ đệm với Apache có vẻ như là một công việc khó khăn do có rất nhiều tùy chọn. May mắn là nó dễ dàng bắt đầu đơn giản và sau đó phát triển khi bạn yêu cầu phức tạp hơn. Hầu hết các administrator sẽ không yêu cầu từng loại bộ nhớ đệm.

Khi cấu hình bộ nhớ đệm, hãy ghi nhớ các vấn đề cụ thể mà bạn đang cố gắng giải quyết để tránh bị lạc trong các lựa chọn triển khai khác nhau. Hầu hết user sẽ được lợi ít nhất từ việc cài đặt tiêu đề. Nếu bạn đang ủy quyền hoặc tạo nội dung, việc đặt cache HTTP có thể hữu ích. Bộ nhớ đệm đối tượng được chia sẻ hữu ích cho các việc cụ thể như lưu trữ các phiên SSL hoặc chi tiết xác thực nếu bạn đang sử dụng nhà cung cấp backend . Bộ nhớ đệm file có thể bị giới hạn ở những máy có hệ thống chậm.


Tags:

Các tin liên quan

Cách cấu hình bộ đệm nội dung Apache trên Ubuntu 14.04
2015-04-10
Cách cài đặt database Apache Accumulo NoSQL thân thiện với dữ liệu lớn trên Ubuntu 14.04
2015-03-19
Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên CentOS 7
2015-03-19
Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên Ubuntu 14.04
2015-03-18
Cách cấu hình Apache bằng Ansible trên Ubuntu 14.04
2015-02-18
Apache vs Nginx: Cân nhắc thực tế
2015-01-28
Cách cài đặt một Apache, MySQL và PHP (FAMP) trên FreeBSD 10.1
2015-01-14
Cách cài đặt WordPress với Apache trên FreeBSD 10.1
2015-01-14
Cách triển khai ứng dụng Rails với Passenger và Apache trên Ubuntu 14.04
2014-11-21
Cách sử dụng JRuby để chạy ứng dụng Rails trên Apache Tomcat 7 và Ubuntu 14.04
2014-11-14