Web 进阶——Apache
一、Apache 优化
1.安装 Apache
2.配置 Apache 保持连接、网页传输压缩、页面缓存时间
1)保持连接、长连接(Keep-alive)
2)网页传输压缩
3)页面缓存时间
3.配置 Apache 隐藏版本号
1)第一种方法
2)第二种方式
4.配置 Apache 防盗链
1)添加图片
2)配置盗图机器
3)访问验证
4)为 Apche 设置防盗链,防止 DaoTu 网站盗用
5.Apache 压力测试
一、Apache 优化
准备工作
- 注意:配置防盗链的时候才需要用到 DaoTu 机器。
1.安装 Apache
[root@Apache ~]# wget http://archive.apache.org/dist/httpd/httpd-2.2.17.tar.gz [root@Apache ~]# yum -y install zlib-devel [root@Apache ~]# tar zxf httpd-2.2.17.tar.gz -C /usr/src/ [root@Apache ~]# cd /usr/src/httpd-2.2.17/ [root@Apache httpd-2.2.17]# ./configure \ --prefix=/usr/local/httpd \ --enable-so \ --enable-rewrite \ --enable-cgi \ --enable-deflate \ --enable-expires && make && make install
注解:
- --enable-deflate:启用 deflate 模块(需安装 zlib-devel 依赖包)
- --enable-expires:启用网页缓存过期时间模块。
安装后优化调整
[root@Apache httpd-2.2.17]# ln -s /usr/local/httpd/bin/* /usr/local/bin/ # 优化执行路径 [root@Apache ~]# httpd -v # 查看 Apache 版本 [root@Apache ~]# sed -i '97s/^#//g' /usr/local/httpd/conf/httpd.conf # 将 # 替换为空 [root@Apache ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd # 复制启动文件 [root@Apache ~]# /etc/init.d/httpd start # 启动 Apache 服务 [root@Apache ~]# netstat -anpt | grep 80 # 查看端口是否开启
将 Apache 主机编译好的,远程复制到 DaoTu 机器中:
[root@Apache ~]# scp -r /usr/local/httpd/ root@192.168.1.2:/usr/local/httpd/
2.配置 Apache 保持连接、网页传输压缩、页面缓存时间
1)保持连接、长连接(Keep-alive)
- 开启 Apache 服务端的长连接后,当客户端请求完成之后,负责返回给客户端数据的进程并不会直接退出;
- 而是等待下一个请求的到来,这样做的主要目的是减少了 TCP 的三次握手。
[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf 16 KeepAlive On 23 MaxKeepAliveRequests 100 29 KeepAliveTimeout 20 [root@Apache ~]# sed -n '/httpd-default.conf/p' /usr/local/httpd/conf/httpd.conf [root@Apache ~]# sed -i '/httpd-default.conf/s/^#//' /usr/local/httpd/conf/httpd.conf [root@Apache ~]# sed -n '/httpd-default.conf/p' /usr/local/httpd/conf/httpd.conf [root@Apache ~]# /etc/init.d/httpd restart [root@Apache ~]# netstat -anpt | grep 80
访问抓包验证:
2)网页传输压缩
客户端在请求服务端数据后,服务端在返回数据包给客户端时,会先对返回的数据进行压缩,压缩之后再传输。
作用:
- 配置 Apache 的网页压缩功能,是使用 Gzip 压缩算法来对 Apache 服务器发布的网页内容进行压缩后再传输到客户端浏览器。
- 通常在 CPU 有空闲,网站带宽占用高时,会启动压缩。
优势:
- 加快网页加载的速度,改善用户的浏览体验。
- 降低网络传输带宽,服务器节省流量。
- 网页压缩有利于搜索引擎的抓取。
方式:Apache 能实现网页压缩功能的模块有 mod_gzip 模块和 mod_deflate 模块。
[root@Apache ~]# apachectl -D DUMP_MODULES | grep deflate [root@Apache ~]# cat <<END >> /usr/local/httpd/conf/httpd.conf AddOutputFilterByType DEFLATE test/html test/plain test/css test/xml test/javascript DeflateCompressionLevel 9 SetOutputFilter DEFLATE END [root@Apache ~]# /etc/init.d/httpd restart [root@Apache ~]# netstat -anpt | grep 80
访问并抓包验证:
3)页面缓存时间
- 通过 mod_expires 模块配置 Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求,减轻服务端工作压力。
- 启动 mod_expires 模块后,会自动生成页面头部信息中的 Expires 标签和 CacheControl 标签;
- 从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
[root@Apache ~]# apachectl -D DUMP_MODULES | grep expires [root@Apache ~]# cat <<END >> /usr/local/httpd/conf/httpd.conf <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 60 seconds" </IfModule> END [root@Apache ~]# /etc/init.d/httpd restart [root@Apache ~]# netstat -anpt | grep 80
访问并抓包验证:
3.配置 Apache 隐藏版本号
1)第一种方法
- ServerTokens Prod:显示最少的信息(默认是 Full 显示完整信息)
- ServerSignature Off:生成页面的页脚。
[root@Apache ~]# sed -n '/^Server/p' /usr/local/httpd/conf/extra/httpd-default.conf [root@Apache ~]# sed -i 's/ServerTokens Full/ServerTokens Prod/' /usr/local/httpd/conf/extra/httpd-default.conf [root@Apache ~]# sed -i 's/ServerSignature On/ServerSignature Off/' /usr/local/httpd/conf/extra/httpd-default.conf [root@Apache ~]# sed -n '/^Server/p' /usr/local/httpd/conf/extra/httpd-default.conf [root@Apache ~]# /etc/init.d/httpd restart [root@Apache ~]# netstat -anpt | grep 80
访问并抓包验证:
2)第二种方式
如果是源代码编译安装,还可以用修改源代码编译的方式:
- 进入 Apache 的源码目录下的 include 目录,编辑 ap_release.h 这个文件,然后重新编译安装即可。
[root@Apache ~]# vim /usr/src/httpd-2.2.17/include/ap_release.h 将: 42 #define AP_SERVER_BASEVENDOR "Apache Software Foundation" 43 #define AP_SERVER_BASEPROJECT "Apache HTTP Server" 44 #define AP_SERVER_BASEPRODUCT "Apache" 46 #define AP_SERVER_MAJORVERSION_NUMBER 2 47 #define AP_SERVER_MINORVERSION_NUMBER 2 48 #define AP_SERVER_PATCHLEVEL_NUMBER 17 修改为: 42 #define AP_SERVER_BASEVENDOR "Coco" 43 #define AP_SERVER_BASEPROJECT "Coco" 44 #define AP_SERVER_BASEPRODUCT "CSDN 愿许浪尽天涯" 46 #define AP_SERVER_MAJORVERSION_NUMBER 8 47 #define AP_SERVER_MINORVERSION_NUMBER 8 48 #define AP_SERVER_PATCHLEVEL_NUMBER 8 [root@Apache ~]# cat /usr/local/httpd/build/config.nice [root@Apache ~]# cd /usr/src/httpd-2.2.17/ [root@Apache httpd-2.2.17]# ./configure \ --prefix=/usr/local/httpd \ --enable-so \ --enable-rewrite \ --enable-cgi \ --enable-deflate \ --enable-expires && make clean && make && make install
[root@Apache ~]# /etc/init.d/httpd stop [root@Apache ~]# /etc/init.d/httpd start [root@Apache ~]# netstat -anpt | grep 80 [root@Apache ~]# httpd -v
访问并抓包验证:
总结:
- 第一种方法虽然说可以隐藏版本号,但是不能隐藏服务名;而第二种方法不但可以隐藏服务名,还可以自定义版本号。
4.配置 Apache 防盗链
- 防盗链就是防止别人盗用服务器中的图片、文件、视频等相关资源。可以通过 Apache 提供的 rewrite 模块进行优化。
1)添加图片
[root@Apache ~]# vim /usr/local/httpd/htdocs/index.html <html> <body> <h1>It works!</h1> <img src="./1.jpg"/> </body> </html> [root@Apache ~]# cd /usr/local/httpd/htdocs/ [root@Apache htdocs]# ls 1.jpg index.html [root@Apache htdocs]# /etc/init.d/httpd start [root@Apache htdocs]# netstat -anpt | grep 80
2)配置盗图机器
[root@DaoTu ~]# vim /usr/local/httpd/htdocs/index.htm <html> <body> <h1>It works!</h1> <img src="http://192.168.1.1/1.jpg"/> </body> </html> [root@DaoTu ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd [root@DaoTu ~]# /etc/init.d/httpd start [root@DaoTu ~]# netstat -anpt | grep 80
3)访问验证
4)为 Apche 设置防盗链,防止 DaoTu 网站盗用
Rewrite 的规则:%{HTTP_REFERER} 浏览 header 中链接字段,存放一个连接的 URL,代表是从哪个链接访问所需的页面。
- !^:不以某个字段开头。
- .*$:以任意字符结尾。
- NC:不区分大小写。
- R:强制跳转。
- 规则匹配:如果响应变量的值匹配所设置的规则,则逐条往下处理;如果不匹配,则后面的规则不再继续匹配。
[root@localhost htdocs]# vim /usr/local/httpd/conf/httpd.conf 131 <Directory "/usr/local/httpd/htdocs"> 添加如下: RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://192.168.1.1/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://192.168.1.1$ [NC] RewriteRule .*\(gif|jpg|swf\)$ http://192.168.1.1/2.png [R,NC] </Directory> [root@Apache htdocs]# ls 1.jpg 2.png index.html [root@Apache htdocs]# /etc/init.d/httpd restart [root@Apache htdocs]# netstat -anpt | grep 80 [root@Apache htdocs]# /etc/init.d/httpd restart
访问验证:
5.Apache 压力测试
- Apache 附带了压力测试工具 ab,非常容易使用,并且完全可以模拟各种条件对 Web 服务器发起测试请求。
- 在进行性能调整优化过程中,可用 ab 压力测试工具进行优化效果的测试。
语法:ab -n 请求数总和 -c 并发用户数 网站网址
测试:
[root@Apache ~]# /usr/local/httpd/bin/ab -n 1000 -c 200 http://192.168.1.1/