(1). Mối quan hệ giữa Apache và Tomcat
Apache HTTPD Server và Apache Tomcat đều là các dự án mã nguồn mở của Apache. Cả hai đều có thể hoạt động độc lập như máy chủ web, nhưng mỗi cái lại có những đặc điểm riêng. Apache HTTPD thường được gọi tắt là Apache.
Apache là máy chủ lâu đời được sử dụng để hỗ trợ các dự án web tĩnh. Trong khi đó, Tomcat chủ yếu được sử dụng để hỗ trợ các dự án web động và tương tác với cơ sở dữ liệu. Tất nhiên, Tomcat cũng có thể được sử dụng để phát triển hệ thống web tĩnh, nhưng về hiệu năng thì kém hơn Httpd. Apache cũng hỗ trợ web động, vì trong thư mục modules của Apache, chúng ta có thể thấy rất nhiều modules với định dạng "mod_*.so". Các modules này mở rộng chức năng của Apache, cho phép nó phục vụ các ngôn ngữ phát triển phía máy chủ như PHP, CGI, nhưng không thể giải mã chương trình Java (jsp, servlet). Tuy nhiên, nó có thể kết nối với Tomcat (một chiều, tức là Apache có thể truy cập tài nguyên Tomcat, nhưng ngược lại thì không).
Tomcat bản thân là một công cụ Servlet Java điển hình. Nó được sử dụng như một container cho Java Servlet, quản lý vòng đời của Servlet và xử lý các yêu cầu trang động. Chúng ta có thể coi Tomcat là một mở rộng của Apache.
Cả hai đều là các container, nhưng chỉ khác nhau ở thứ được triển khai. Apache là container cho HTML, có chức năng giống như IIS, trong khi Tomcat là container cho jsp/servlet, được sử dụng để triển khai JSP và JAVA, tương tự như IBM WebSphere, BEA WebLogic, Sun JRun, v.v.
Apache và Tomcat là độc lập với nhau, nhưng có thể tích hợp trên cùng một máy chủ. Ví dụ: Apache giống như một chiếc xe tải, có thể chở một số thứ như HTML. Nhưng không thể chở nước, để chở nước cần có thùng chứa (thùng桶), Tomcat chính là một cái thùng (chứu những thứ như JAVA), và cái thùng này có thể không đặt trên xe tải.
(2). Ẩn thông tin phiên bản Apache
Việc ẩn phiên bản có thể giúp tránh hacker tấn công dựa vào thông tin phiên bản Apache để tìm kiếm lỗ hổng tương ứng.
Sử dụng curl -I [Địa chỉ IP hoặc tên miền] để xem tiêu đề phản hồi, bạn có thể thấy phiên bản Server, như sau đã kiểm tra phiên bản Server của Baidu, Taobao, Tencent, họ đều đã ẩn phiên bản.
[root@maychu1 ~]# curl -I www.baidu.com| grep Server
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 277 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
Server: bfe/1.0.8.18
[root@maychu1 ~]# curl -I www.taobao.com | grep Server
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 278 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
Server: Tengine
[root@maychu1 ~]# curl -I www.tencent.com | grep Server
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 189 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
Server: NWS_UGC_HY
Tải gói mã nguồn Apache (https://mirrors.aliyun.com/apache/httpd/), gói mã nguồn apr và apr-util (http://mirror.bit.edu.cn/apache//apr/) và tải lên, trước khi biên dịch mã nguồn, sửa các tệp cấu hình tương ứng
[root@maychu1 ~]# tar zxf httpd-2.4.39.tar.gz -C /usr/local/src/
[root@maychu1 ~]# cd /usr/local/src/httpd-2.4.39/
[root@maychu1 httpd-2.4.39]# vim include/ap_release.h //Sửa dòng 40~47
#define AP_SERVER_BASEVENDOR "IIS" //Tên nhà cung cấp dịch vụ, ban đầu là Apache Software Foundation
#define AP_SERVER_BASEPROJECT "IIS HTTP Server" //Tên dự án dịch vụ, ban đầu là Apache HTTP Server
#define AP_SERVER_BASEPRODUCT "IIS" //Tên sản phẩm dịch vụ, ban đầu là Apache
#define AP_SERVER_MAJORVERSION_NUMBER 7 //Số phiên bản chính, ban đầu là 2
#define AP_SERVER_MINORVERSION_NUMBER 0 //Số phiên bản phụ, ban đầu là 4
#define AP_SERVER_PATCHLEVEL_NUMBER 0 //Mức vá lỗi, ban đầu là 39
#define AP_SERVER_DEVBUILD_BOOLEAN 0
Sau đó cài đặt các gói phụ thuộc, biên dịch và cài đặt apr, apr-util và apache. Lưu ý: Phiên bản Apache 2.4.7 trở lên cần phiên bản apr 1.5.0 hoặc cao hơn.
//Cài đặt các gói phụ thuộc
[root@maychu1 httpd-2.4.39]# yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel gcc expat-devel
[root@maychu1 httpd-2.4.39]# cd ~
[root@maychu1 ~]# tar zxf apr-1.6.5.tar.gz -C /usr/local/src/
[root@maychu1 ~]# tar zxf apr-util-1.6.1.tar.gz -C /usr/local/src/
//Biên dịch và cài đặt apr
[root@maychu1 ~]# cd /usr/local/src/apr-1.6.2/
[root@maychu1 apr-1.6.2]# ./configure --prefix=/usr/local/apr
[root@maychu1 apr-1.6.2]# make && make install
[root@maychu1 apr-1.6.2]# echo $?
0
//Biên dịch và cài đặt apr-util
[root@maychu1 apr-1.6.5]# cd ../apr-util-1.6.1/
[root@maychu1 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[root@maychu1 apr-util-1.6.1]# make && make install
[root@maychu1 apr-util-1.6.1]# echo $?
0
//--enable-hỗ trợ tải động module, --enable-rewrite hỗ trợ viết lại địa chỉ trang web, --enable-ssl hỗ trợ mã hóa ssl, --enable-deflate hỗ trợ nén trước khi truyền trang, --enable-expires hỗ trợ đặt thời gian lưu cache trang web
[root@maychu1 apr-util-1.6.1]# cd ../httpd-2.4.39/
[root@maychu1 httpd-2.4.39]# ./configure --prefix=/usr/local/apache2.4.39 --enable-so --enable-rewrite --enable-ssl --enable-deflate --enable-expires
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
[root@maychu1 httpd-2.4.39]# make && make install
[root@maychu1 httpd-2.4.39]# echo $?
0
Tạo script khởi động, khởi động và kiểm tra.
[root@maychu1 httpd-2.4.39]# cp /usr/local/apache2.4.39/bin/apachectl /etc/init.d/httpd
[root@maychu1 httpd-2.4.39]# /etc/init.d/httpd
[root@maychu1 httpd-2.4.39]# curl -I 192.168.5.101
HTTP/1.1 200 OK
Date: Mon, 05 Aug 2019 06:56:57 GMT
Server: IIS/7.0.0 (Unix) //Có thể thấy ở đây hiển thị là IIS/7.0.0
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html
Lưu ý: Lúc này không thể sử dụng chkconfig để thiết lập tự khởi động khi boot máy, vì thiếu hai dòng quan trọng. Sau khi thiết lập như sau, mới có thể thiết lập tự khởi động
[root@maychu1 httpd-2.4.39]# cd /usr/local/apache2.4.39/
[root@maychu1 apache2.4.39]# vim /etc/init.d/httpd
#!/bin/sh //Thêm dòng này bên dưới dòng đầu tiên, tức là bên dưới dòng đầu tiên
# chkconfig: 2345 64 36 //Khởi động ở chế độ nào của hệ thống, thứ tự khởi động, thứ tự tắt
# description: apache //Mô tả
[root@maychu1 apache2.4.39]# chkconfig --add httpd //Thêm vào quản lý chkconfig
[root@maychu1 apache2.4.39]# chkconfig --list httpd
httpd 0:tắt 1:tắt 2:bật 3:bật 4:bật 5:bật 6:tắt
Tiếp tục có thể ẩn loại hệ thống và phiên bản module
[root@maychu1 apache2.4.39]# vim conf/httpd.conf
Include conf/extra/httpd-default.conf //Dòng 490, kích hoạt dòng này
[root@maychu1 apache2.4.39]# vim conf/extra/httpd-default.conf
ServerTokens Prod //Dòng 55, không hiển thị loại hệ điều hành của máy chủ
ServerSignature Off //Dòng 65, không hiển thị phiên bản máy chủ web và phiên bản module. Phiên bản apache2.4 trở về trước cần sửa.
Tải lại cấu hình, và xem kết quả
[root@maychu1 apache2.4.39]# /etc/init.d/httpd graceful //restart cũng được, nhưng sẽ ngắt kết nối
[root@maychu1 apache2.4.39]# curl -I 192.168.5.101
HTTP/1.1 200 OK
Date: Mon, 05 Aug 2019 07:40:41 GMT
Server: IIS //Có thể thấy loại máy chủ và phiên bản máy chủ web đều đã bị ẩn
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html
(3). Thay đổi người dùng mặc định chạy apache
Kiểm tra người dùng đang chạy apache hiện tại
[root@maychu1 apache2.4.39]# ps aux | grep httpd
root 1399 0.0 0.2 74924 2960 ? Ss 14:56 0:00 /usr/local/apache2.4.39/bin/httpd
daemon 1702 0.0 0.4 429424 4724 ? Sl 15:40 0:00 /usr/local/apache2.4.39/bin/httpd
daemon 1703 0.0 0.4 363888 4204 ? Sl 15:40 0:00 /usr/local/apache2.4.39/bin/httpd
daemon 1704 0.0 0.4 363888 4204 ? Sl 15:40 0:00 /usr/local/apache2.4.39/bin/httpd
root 1789 0.0 0.0 112724 996 pts/0 R+ 15:49 0:00 grep --color=auto httpd
Thay đổi người dùng mặc định chạy apache
[root@maychu1 apache2.4.39]# useradd -M -s /sbin/nologin apache
[root@maychu1 apache2.4.39]# vim conf/httpd.conf
User apache //Dòng 167~168
Group apache
Khởi động lại Apache, và kiểm tra
[root@maychu1 apache2.4.39]# /etc/init.d/httpd graceful
[root@maychu1 apache2.4.39]# ps aux | grep httpd
root 1399 0.0 0.2 74924 2968 ? Ss 14:56 0:00 /usr/local/apache2.4.39/bin/httpd
apache 1816 0.0 0.4 363888 4204 ? Sl 15:58 0:00 /usr/local/apache2.4.39/bin/httpd
apache 1817 0.0 0.4 363888 4204 ? Sl 15:58 0:00 /usr/local/apache2.4.39/bin/httpd
apache 1818 0.0 0.4 363888 4204 ? Sl 15:58 0:00 /usr/local/apache2.4.39/bin/httpd
root 1901 0.0 0.0 112724 996 pts/0 R+ 15:58 0:00 grep --color=auto httpd
(4). Thay đổi quyền thư mục Apache và các tệp bên trong
htdocs là thư mục chính chứa trang web của Apache, thay đổi chủ sở hữu và nhóm sở hữu của nó
[root@maychu1 apache2.4.39]# chown apache:apache htdocs/ -R
[root@maychu1 apache2.4.39]# ll -sd htdocs/
0 drwxr-xr-x 2 apache apache 24 8月 5 14:23 htdocs/
(5). Đảm bảo quyền tệp nhật ký Apache là root
Vì việc ghi nhật ký của Apache được tiến hành bởi tiến trình chính của Apache, và tiến trình chính của Apache lại được khởi động bởi người dùng root, vì vậy điều này không ảnh hưởng đến việc xuất nhật ký. Đây cũng là phương pháp an toàn nhất để ghi nhật ký.
[root@maychu1 apache2.4.39]# ll logs/
Tổng cộng 12
-rw-r--r-- 1 root root 142 8月 5 15:40 access_log
-rw-r--r-- 1 root root 1142 8月 5 15:58 error_log
-rw-r--r-- 1 root root 5 8月 5 15:58 httpd.pid
[root@maychu1 apache2.4.39]# ll -ds logs/
0 drwxr-xr-x 2 root root 58 8月 5 14:56 logs/
(6). Sử dụng cronlog để chia tách nhật ký Apache
máy chủ apache, mặc định tệp nhật ký không được chia tách, một tệp nguyên thể vừa khó quản lý, cũng khó phân tích và thống kê. cronolog là một chương trình lọc đơn giản, đọc các mục nhật ký từ đầu vào chuẩn và xuất mỗi mục đến tệp nhật ký được chỉ định bởi mẫu tên tệp và ngày giờ hiện tại. Khi tên tệp mở rộng thay đổi, tệp hiện tại sẽ được đóng và một tệp mới được mở. cronolog được thiết kế để sử dụng cùng với một máy chủ web như Apache, chia nhật ký truy cập thành nhật ký hàng ngày hoặc hàng tháng.
Cài đặt cronlog
[root@maychu1 apache2.4.39]# yum -y install epel-release
[root@maychu1 apache2.4.39]# yum -y install cronolog
Cấu hình Apache sử dụng cronlog
[root@maychu1 apache2.4.39]# vim conf/httpd.conf
//Dòng 274
ErrorLog "|/usr/sbin/cronolog /usr/local/apache2.4.39/logs/error_%Y%m%d.log"
//Dòng 303
CustomLog "|/usr/sbin/cronolog /usr/local/apache2.4.39/logs/access_%Y%m%d.log" combined
[root@maychu1 apache2.4.39]# /etc/init.d/httpd graceful
[root@maychu1 apache2.4.39]# ls logs/ //Lúc này sẽ ngay lập tức tạo ra tệp nhật ký error
access_log error_20190806.log error_log httpd.pid
[root@maychu1 apache2.4.39]# curl -I 192.168.5.101
HTTP/1.1 200 OK
Date: Tue, 06 Aug 2019 02:07:23 GMT
Server: IIS
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html
[root@maychu1 apache2.4.39]# ls logs/ //Sau khi truy cập một lần sẽ tạo ra tệp nhật ký access
access_20190806.log access_log error_20190806.log error_log httpd.pid
(7). Trang lỗi
Để nâng cao trải nghiệm người dùng trên trang web, tránh các thông báo lỗi mặc định xấu xí như 404, 403 xuất hiện. Chúng ta cần tối ưu hóa trang lỗi, làm cho chúng trở nên đẹp mắt hơn. Trang lỗi không chỉ để thông báo cho người dùng rằng truy cập có vấn đề, mà còn cần hướng dẫn người dùng đến trang đúng.
Phương pháp một: Chỉ định đến giao diện tùy chỉnh
[root@maychu1 apache2.4.39]# vim conf/httpd.conf
<Directory "/usr/local/apache2.4.39/htdocs"> //Thêm một dòng bên dưới dòng này, dòng này là dòng 223
ErrorDocument 404 /404.html
[root@maychu1 apache2.4.39]# echo "Đây là trang 404.html" > htdocs/404.html //Tạo một trang 404 để kiểm tra
[root@maychu1 apache2.4.39]# /etc/init.d/httpd graceful //Tải lại
Kiểm tra trên Windows
Phương pháp hai: Chuyển hướng đến trang web được chỉ định
[root@maychu1 apache2.4.39]# vim conf/httpd.conf
<Directory "/usr/local/apache2.4.39/htdocs">
ErrorDocument 404 http://www.baidu.com //Vẫn là vị trí tương tự, chỉ thay đổi thành địa chỉ tên miền ngoài mạng
[root@maychu1 apache2.4.39]# /etc/init.d/httpd graceful //Tải lại
Kiểm tra trên Windows, có thể thấy chuyển hướng trực tiếp đến Baidu
(8). Kích hoạt module nén
Khi lượng truy cập người dùng tăng và lượng nội dung tăng, băng thông của trang web sẽ tăng liên tục, theo đó là chi phí trang web tăng lên. Và khi lượng nội dung tăng lên, nếu băng thông của khách hàng nhỏ, sẽ ảnh hưởng đến trải nghiệm của người dùng. Vì vậy, xét từ hai khía cạnh này, một số nội dung của trang web phải được nén trước khi truyền cho người dùng, sau đó tại phía khách hàng tiến hành giải nén, để đạt được hiệu quả đôi bên cùng có lợi.
Module nén của Apache sử dụng mod_deflate, module này cung cấp bộ lọc đầu ra DEFLATE, cho phép máy chủ nén nội dung đầu ra trước khi gửi đến máy khách, để tiết kiệm băng thông. Ý tưởng cốt lõi là nén tệp trước trên máy chủ, sau đó mới truyền, có thể giảm đáng kể kích thước truyền tải tệp. Khi truyền xong, trình duyệt khách hàng sẽ giải nén lại nội dung đã được nén. Nếu không có trường hợp đặc biệt nào, tất cả nội dung văn bản đều nên được nén gzip, ví dụ: html (php), js, css, xml, txt, v.v. Trường hợp đặc biệt là một số js code có nhiều quảng cáo trên trang chủ, vì cần tải mỗi lần để thống tin tin truy cập, nên các js code của các trang web này sẽ không được nén gzip.
Ngoài ra cần lưu ý, mặc dù module nén giảm tiêu thụ băng thông, nhưng lại tăng tiêu thụ CPU.
Sử dụng lệnh để kiểm tra đã cài đặt module deflate chưa, nếu trả về deflate_module(static) thì là cài đặt cùng lúc khi biên dịch, nếu trả về deflate_module(shared) thì là cài đặt bằng phương thức DSO.
[root@maychu1 apache2.4.39]# /usr/local/apache2.4.39/bin/apachectl -M | grep deflate
[root@maychu1 ~]# ls /usr/local/apache2.4.39/modules/mod_deflate.so
/usr/local/apache2.4.39/modules/mod_deflate.so //Chứng tỏ tồn tại nhưng chưa kích hoạt
Lưu ý: Phương pháp cài đặt khi biên dịch, khi biên dịch thêm --enable-deflate là được; phương thức DSO có thể biên dịch sau khi biên dịch máy chủ, hoặc sau khi cài đặt xong sử dụng công cụ mở rộng apxs trong thư mục chính của Apache để biên dịch và thêm vào.
Sử dụng công cụ mở rộng apxs để cài đặt module deflate
[root@maychu1 apache2.4.39]# ls /usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.*
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.c
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.dep
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.dsp
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.exp
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.la
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.lo
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.mak
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.o
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.slo
//-c chỉ ra cần thực hiện thao tác biên dịch; -i chỉ ra cần thực hiện thao tác cài đặt, để cài đặt một hoặc nhiều đối tượng chia sẻ động vào thư mục modules của máy chủ;
//-a chỉ ra cần thêm một dòng LoadModule vào tệp httpd.conf để kích hoạt module này, hoặc nếu dòng này đã tồn tại thì kích hoạt.
[root@maychu1 httpd-2.4.39]# bin/apxs -cia /usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.c
[root@maychu1 httpd-2.4.39]# echo $?
0
[root@maychu1 httpd-2.4.39]# ls modules/mod_deflate.so
modules/mod_deflate.so //Kiểm tra xem có tồn tại module deflate không
[root@maychu1 httpd-2.4.39]# vim conf/httpd.conf
LoadFile /usr/lib64/libz.so //Thêm
LoadModule deflate_module modules/mod_deflate.so //Thêm một dòng bên trên dòng này, dòng này là dòng 106
[root@maychu1 httpd-2.4.39]# bin/apachectl -M | grep deflate
deflate_module (shared) //Hiển thị như vậy là cài đặt thành công
Tiếp tục cấu hình tham số module deflate
[root@maychu1 httpd-2.4.39]# vim conf/httpd.conf
//Thêm sau dòng 158, tức là sau khi kết thúc đoạn LoadModule lớn này
<Ifmodule mod_deflate.c>
DeflateCompressionLevel 9 //Mức độ nén, giá trị 1~9, 9 là cao nhất, mức độ nén càng cao, CPU tiêu thụ càng lớn, thường sử dụng 6 hoặc 8
SetOutputFilter DEFLATE //Kích hoạt nén
DeflateFilterNote Input instream //Khai báo luồng đầu vào
DeflateFilterNote Output outstream //Khai báo luồng đầu ra
DeflateFilterNote Ratio ratio //Khai báo tỷ lệ nén
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript //Khai báo loại nén
</Ifmodule>
[root@maychu1 httpd-2.4.39]# /etc/init.d/httpd graceful //Tải lại
[root@maychu1 httpd-2.4.39]# cp conf/httpd.conf htdocs/httpd.html //Tạo một trang để kiểm tra
[root@maychu1 httpd-2.4.39]# ll -h htdocs/httpd.html //Xem kích thước trang kiểm tra
-rw-r--r-- 1 root root 19K 8月 6 15:47 htdocs/httpd.html
Lúc này sử dụng trình duyệt 360 cài đặt plugin YSLOW, trước tiên đăng nhập trang kiểm tra (chế độ nhanh), sau đó mở tùy chọn Components của plugin YSLOW, có thể thấy kích thước ban đầu 19.1K, kích thước sau khi nén 6.3K.
Lưu ý: Trong môi trường sản xuất, khi kích hoạt mod_deflate, đối với các tệp quá nhỏ và một số định dạng hình ảnh nhất định, không nên nén chúng, có thể nén càng lớn hơn.
Tất cả các loại tệp có thể nén: text/plain, text/html, text/php, text/xml, text/css, text/javascript, application/xhtml+xml, application/xml, application/rss+xml, application/atom_xml, application/x-javascript, application/x-httpd-php, image/svg+xml, image/gif, image/png, image/jpe, image/swf, image/jpeg, image/bmp.
(9). Kích hoạt module cache trang web
Thông qua module mod_deflate đã kích hoạt nén,在很大程度上 tiết kiệm băng thông doanh nghiệp, giảm chi phí doanh nghiệp. Nhưng do ngày càng có nhiều hình ảnh, script, css và flash được nhúng vào trang, khi khách truy cập trang web chắc chắn sẽ thực hiện nhiều lần yêu cầu http, vì vậy chúng ta có thể sử dụng module mod_expires để đặt ExpiresHeader để cache các tệp này.
Expires là thông qua header báo văn bản chỉ định thời gian cache các loại tệp cụ thể trong trình duyệt. Bình thường, hầu hết hình ảnh, flash sau khi xuất bản đều không cần sửa đổi thường xuyên, vì vậy sau khi cache, trình duyệt lần đầu tiên tải từ máy chủ, không cần tải lại từ máy chủ mà đọc trực tiếp từ cache trình duyệt. Như vậy tốc độ truy cập trang của khách hàng sẽ tăng lên nhanh chóng, áp lực băng thông của doanh nghiệp cũng được giảm nhẹ.
Sử dụng lệnh để kiểm tra đã cài đặt module expires chưa, nếu trả về expires_module(static) thì là cài đặt cùng lúc khi biên dịch, nếu trả về expires_module(shared) thì là cài đặt bằng phương thức DSO.
[root@maychu1 httpd-2.4.39]# bin/apachectl -M | grep expires
Lưu ý: Phương pháp cài đặt khi biên dịch, khi biên dịch thêm --enable-expires là được; phương thức DSO có thể biên dịch sau khi biên dịch máy chủ, hoặc sau khi cài đặt xong sử dụng công cụ mở rộng apxs trong thư mục chính của Apache để biên dịch và thêm vào.
Sử dụng công cụ mở rộng apxs để cài đặt module deflate
[root@maychu1 httpd-2.4.39]# ls /usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.*
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.c
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.dep
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.dsp
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.exp
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.la
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.lo
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.mak
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.o
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.slo
//-c chỉ ra cần thực hiện thao tác biên dịch; -i chỉ ra cần thực hiện thao tác cài đặt, để cài đặt một hoặc nhiều đối tượng chia sẻ động vào thư mục modules của máy chủ;
//-a chỉ ra cần thêm một dòng LoadModule vào tệp httpd.conf để kích hoạt module này, hoặc nếu dòng này đã tồn tại thì kích hoạt.
[root@maychu1 httpd-2.4.39]# bin/apxs -cia /usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.c
[root@maychu1 httpd-2.4.39]# echo $?
0
[root@maychu1 httpd-2.4.39]# ls /usr/local/apache2.4.39/modules/mod_expires.so
/usr/local/apache2.4.39/modules/mod_expires.so //Kiểm tra xem có tồn tại module expires không
[root@maychu1 httpd-2.4.39]# bin/apachectl -M | grep expires
expires_module (shared) //Hiển thị như vậy là cài đặt thành công
Tiếp tục cấu hình tham số module expires
[root@maychu1 httpd-2.4.39]# vim conf/httpd.conf
//Nếu muốn kích hoạt toàn cầu tham số module expires, có thể thêm sau đoạn LoadModule lớn (khoảng dòng 158)
//Nếu chỉ muốn cấu hình cho một thư mục cụ thể, có thể thêm tham số module expires vào thẻ <Directory></Directory> tương ứng
//Thậm chí có thể cấu hình cho máy chủ ảo, thêm tham số module expires vào thẻ <VirtualHost></VirtualHost> tương ứng
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 12 month"
ExpiresByType text/html "access plus 12 months"
ExpiresByType text/css "access plus 12 months"
ExpiresByType image/gif "access plus 12 months"
ExpiresByType image/jpeg "access plus 12 months"
ExpiresByType image/jpg "access plus 12 months"
ExpiresByType image/png "access plus 12 months"
EXpiresByType application/x-shockwave-flash "access plus 12 months"
EXpiresByType application/x-javascript "access plus 12 months"
ExpiresByType video/x-flv "access plus 12 months"
</IfModule>
[root@maychu1 httpd-2.4.39]# /etc/init.d/httpd graceful //Tải lại
Giải thích tham số:
ExpiresDefault "<base> [plus] {<number> <type>}"
ExpiresByType "<base> [plus] {<number> <type>}"
<base> có 3 tham số: access, now (tương đương với 'access'), modification (ngày sửa đổi cuối cùng)
plus (cộng) từ khóa là tùy chọn.
<num> phải là số nguyên, đảm bảo có thể nhận bởi atoi(). (atoi có thể chuyển đổi chuỗi thành số nguyên dài)
<type> loại tham số: years, months, weeks, days, hours, minutes, seconds
Lưu ý: Nếu bạn sử dụng cài đặt dựa trên ngày sửa đổi cuối cùng, "Expires" header sẽ không được thêm vào những nội dung không đến từ tệp trên đĩa, vì những nội dung này không thuộc tính "thời gian sửa đổi cuối cùng". Thời điểm cơ sở có thể là thời gian sửa đổi cuối cùng của tệp nguồn hoặc thời điểm truy cập của khách hàng vào tệp nguồn, việc sử dụng cái nào do <code> chỉ định. "M" biểu thị thời gian sửa đổi cuối cùng của tệp nguồn, "A" biểu thị thời điểm truy cập của khách hàng vào tệp nguồn, cần lưu ý <code> và seconds không có khoảng trắng. Sự khác biệt giữa hai cơ sở này rất tinh tế. Nếu sử dụng "M", tất cả các bản sao tài liệu trong cache hiện tại sẽ hết hạn cùng một lúc, điều này có thể hữu ích cho URL được cập nhật định kỳ (ví dụ: thông báo hàng tuần cùng vị trí). Nếu sử dụng "A", thì thời hạn hiệu lực mỗi khách hàng nhận được sẽ khác nhau, điều này có thể hữu ích cho những hình ảnh gần như không được cập nhật, đặc biệt là cho một nhóm tài liệu liên quan đều tham chiếu cùng một hình ảnh.
Lần nữa sử dụng trình duyệt 360 mở trang kiểm tra, sau đó mở YSLOW, có thể thấy xuất hiện thời gian cache, đến ngày 31 tháng 7 năm 2020.
Ưu điểm của cache: 1. Rút ngắn thời gian phản hồi của máy chủ; 2. Giảm gánh nặng cho máy chủ; 3. Giảm lượng sử dụng băng thông mạng, giảm chi phí doanh nghiệp.
Nhược điểm của cache: Vì sử dụng cài đặt cache, dẫn đến nội dung được cache đã được cập nhật, nhưng khách hàng vẫn thấy cũ. Đối với nhược điểm này, có thể rút ngắn thời gian cache (ví dụ 1 ngày) hoặc đổi tên đối tượng được cache.
(10). Kích hoạt kết nối dài
Sau khi mở kết nối dài, sẽ duy trì kết nối, giảm số lần bắt tay ba, nhưng sẽ tiêu tốn bộ nhớ. Có nên mở hay không, phụ thuộc vào việc trong một đơn vị thời gian có thực hiện nhiều kết nối (ba lần bắt tay) hay không, một kết nối có nhiều yêu cầu, nên mở, và điều chỉnh thời gian KeepAliveTimeout một cách thích hợp.
Trong httpd.conf của Apache, KeepAlive chỉ giữ kết nối hoạt động, nếu KeepAlive được đặt là On, thì các yêu cầu từ cùng một khách hàng không cần phải kết nối lại, tránh mỗi yêu cầu đều phải tạo một kết nối mới làm tăng gánh nặng cho máy chủ. Tất nhiên thời gian hoạt động của kết nối KeepAlive bị giới hạn bởi KeepAliveTimeOut. Nếu khoảng thời gian giữa yêu thứ hai và yêu thứ nhất vượt quá thời gian KeepAliveTimeOut, kết nối đầu tiên sẽ bị ngắt, sau đó tạo kết nối thứ hai.
Vì vậy, trong trường hợp thông thường, các trang web có nhiều hình ảnh nên đặt KeepAlive là On. Nhưng KeepAliveTimeOut nên đặt bao nhiêu giây là một vấn đề đáng thảo luận. Nếu KeepAliveTimeOut đặt quá ngắn, ví dụ đặt là 1 giây, thì APACHE sẽ thường xuyên tạo kết nối mới, tất nhiên sẽ tiêu tốn không ít tài nguyên; ngược lại, nếu KeepAliveTimeOut đặt quá dài, ví dụ đặt là 300 giây, thì chắc chắn trong APACHE sẽ có nhiều kết nối vô dụng chiếm dụng tài nguyên máy chủ, cũng không phải là chuyện tốt. Vì vậy, cuối cùng nên đặt KeepAliveTimeOut bao nhiêu, phụ thuộc vào lưu lượng truy cập trang web, cấu hình máy chủ.
Sửa đổi cấu hình kết nối dài
[root@maychu1 apache2.4.39]# vim conf/httpd.conf
Include conf/extra/httpd-default.conf //Kích hoạt dòng này, tìm kiếm một chút, khoảng dòng 500
[root@maychu1 apache2.4.39]# vim conf/extra/httpd-default.conf
Timeout 60 //Dòng 10, thời gian nhận một yêu cầu GET; khi nhận yêu cầu POST hoặc PUT, thời gian giữa hai gói TCP; thời gian giữa hai gói ACK trong quá trình truyền đáp ứng TCP. Mặc định 10
KeepAlive On //Dòng 16, mặc định là đã mở
MaxKeepAliveRequests 100 //Dòng 23, số yêu cầu tối đa của một kết nối dài, vượt quá sẽ ngắt kết nối và tạo lại, mặc định 100
KeepAliveTimeout 30 //Dòng 29, sửa đổi thời gian chờ, đơn vị giây, mặc định 5 giây