Apache优化

发布时间 2023-04-18 09:57:50作者: 乱七八糟博客备份

一.开启Apache的gzip(deflate)功能

gzip 可以极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上.
1.查看是否启用mod_deflate

[root@httpd ~]# apachectl -M | grep deflate

如果有显示,则表示已启用压缩;如果没有显示,则需要手动启动deflate模块

2.添加模块
一共需要开启两个模块定位并去除“#”号

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule deflate_module modules/mod_deflate.so 
LoadModule headers_module modules/mod_headers.so

3.添加deflate参数配置

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf 
//末尾添加下面内容即可
<IfModule mod_deflate.c>
 DeflateCompressionLevel 6 //压缩比率,1-9之间不建议设置太高,虽然有很高的压缩率,但是占用更多的 CPU 资源.
 SetOutputFilter DEFLATE 
 #AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php
 #AddOutputFilterByType DEFLATE image/*
 AddOutputFilterByType DEFLATE text/*
 AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript 
 AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp 
 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary 
 SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
 SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
</IfModule>

相关参数解释:
DeflateCompressionLevel 9 #压缩程度的等级,预设可以采用 6 这个数值,以维持耗用处理器效能与网页压缩质量的平衡。

SetOutputFilter DEFLATE #设置输出过滤器,对输出启用压缩,必须的,就像一个开关一样,告诉 apache 对传输到浏览器的内容进行压缩。

AddOutputFilterByType DEFLATE text/*#设置对文件是文本的内容进行压缩,例如 text/html text/css text/plain 等。

AddOutputFilterByType DEFLATE application/ms* application/vnd*application/postscript application/javascript application/x-javascript#对 javascript 文件进行压缩

AddOutputFilterByType DEFLATE application/x-httpd-phpapplication/x-httpd-fastphp #对 php 类型的文件进行压缩.

SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzipdont-vary #设置不对后缀gif,jpg,jpeg,png 的图片文件进行压缩。注:?:表示不会捕获 ( )里内容了。

SetEnvIfNoCaseRequest_URI(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对 exe,tgz,gz 等的文件进行压缩

SetEnvIfNoCaseRequest_UR(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary #同上就是设置不对 pdf,avi,mp3 等的文件进行压缩。

4.重启httpd服务

[root@httpd ~]# systemctl restart httpd

5.验证
随便访问httpd的网址,检查元素
在这里插入图片描述

二.优化启用网站缓存expires

这个非常有用的优化,mod_expires 可以减少 20-30%左右的重复请求,让重复的用户对指定的页面请求结果都 CACHE 在本地,根本不向服务器发出请求。但要注意更新快的文件不要这么做。
1.启动expires模块

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf 
 //去除前面#号 LoadModule expires_module modules/mod_expires.so

2.在配置文件末尾添加,expires配置参数

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf 

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "now plus 1 month"
ExpiresByType application/x-javascript "now plus 5 day"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/bmp "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/png "access plus 1 minute"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresDefault "now plus 0 minute"
</IfModule>

相关参数解释

格式 ExpiresDefault 和 ExpiresByType 指令同样能够用易懂的语法格式进行定义: ExpiresDefault "<base> [plus] {<num>}" ExpiresByType
type/encoding "<base> [plus] {<num>}"

base关键词是下列之一:

•access

•now (等价于'access ')

•modification

plus 关键字是可选的。<num>必须是整数,<type>是下列之一:

•years

•months

•weeks

•days

•hours

•minutes

•seconds

有效期可以通过增加"<num><type>"子句进一步调整如下:

ExpiresByType text/html "access plus 1 month 15 days 2 hours"

ExpiresByType image/gif "modification plus 5 hours 3 minutes"

有关 Apache Expires Module 的介绍,可以参阅其官方文档: http://httpd.apache.org/docs/2.4/mod/mod_expires.html
3.重启

[root@httpd ~]# systemctl restart httpd

4.验证
在这里插入图片描述

三.禁止网站目录遍历

禁止通过文件的方式访问网站根目录下的所有数据。

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf 
//定位找到:Options Indexes FollowSymLinks去除Indexes即可
[root@httpd ~]# systemctl restart httpd

禁止 Apache 显示该目录结构。用户就不会看到该目录下的文件和子目录列表了。

四.apache隐藏版本号

1.主配置文件启用httpd-default.conf

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf 
//定位找到 Include conf/extra/httpd-default.conf并去除“#”号

2.修改httpd-default.conf配置

[root@httpd ~]# vim /usr/local/httpd/conf/extra/httpd-default.con
//修改两处为
ServerTokens Prod
ServerSignature Off

3.重启并测试

[root@httpd ~]# systemctl restart httpd

在这里插入图片描述

五.配置httpd日志轮替切割

1.禁止默认日志保存配置

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf 
//定位并禁用:
#ErrorLog "logs/error_log"
#CustomLog "logs/access_log" common
//添加的轮替策略:
ErrorLog "|/usr/local/httpd/bin/rotatelogs -l logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/httpd/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined

注:其中 86400 为轮转的时间单位为
2.重启

[root@httpd ~]# systemctl restart httpd.service 

3.验证
在这里插入图片描述

六.配置防盗链

有时候,你的网站莫名其妙的访问量变大,不要高兴的太早,有可能是被别人盗链了。
举个例子:比如你搭了个 discuz 论坛,里面有些热点图片、视频;然后别人将他网站上访问图片的地址重定向到你的 discuz 上,这样他的服务器就可以空闲出来了;也就是说别人访问他网站的图片视频,消耗的确是你服务器的资源;解决这个问题的方法是配置下防盗链,让外来的盗不了链.
1.配置文件启用rewrite模块

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf 
//定位找到 LoadModule rewrite_module modules/mod_rewrite.so并去除“#”号:

2.打开虚拟主机配置文件

[root@httpd ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
//在<VirtualHost>内部添加:
 RewriteEngine On
 RewriteCond %{HTTP_REFERER} !^$
 RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC]
 RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC]
 RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC]
 RewriteCond %{HTTP_REFERER} !^http://www.benet.com$ [NC]
 RewriteRule . *\.(gif|jpg|swf)$http://www.benet.com/about/nolink.png[R,NC,L]

RewriteEngine On #启用 rewrite,要想 rewrite 起作用,必须要写上

RewriteCond test-string condPattern #写在 RewriteRule 之前,可以有一或 N 条,用于测试rewrite 的匹配条件,具体怎么写,后面会详细说到。

RewriteRule Pattern Substitution #规则

%{HTTP_REFERER}:服务器变量,HTTPReferer 是 header 的一部分,当浏览器向 web服务器发送请求的时候,一般会带上 Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从 HTTP Referer 中统计出每天有多少用户点击我主页上的链接访问他的网站。

[ NC]指的是不区分大小写,[R]强制重定向 redirect

字母 L 表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则

RewriteCond %{HTTP_REFERER} !^$

上面这一行意在允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。

RewriteCond %{HTTP_REFERER} !benet.com/.$ [NC]
RewriteCond %{HTTP_REFERER} !www.benet.com/.
$ [NC]
设置允许访问的 HTTP 来源,包括网站自身。

RewriteRule .*.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png [R,NC,L]
将不满足 referer 条件的访问重定向至 nolink.png。 nolink.png 位于允许“盗链”的目录 about中,要相当注意,不然,警告信息和图片将无法在对方网站上显示。
注意:测试时要清除济浏览器缓存.

3.重启服务器

[root@httpd ~]# systemctl restart httpd

ps:还可以使用另一方式实现防盗链 referer

七.在php服务器上安装xcache缓存,提高网站访问速度

1.下载xcahe安装包
提取码1111
或者wget下载

wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz

2.在php上安装xcache

[root@php ~]# tar zxf xcache-3.2.0.tar.gz 
[root@php ~]# cd xcache-3.2.0/
[root@php xcache-3.2.0]# yum -y install autoconf
[root@php xcache-3.2.0]# /usr/local/php5.6/bin/phpize
//用 phpize 生成 configure 配置文件
[root@php xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config
[root@php xcache-3.2.0]# make && make install //编译安装

注:安装完成之后,出现下面的界面,记住以下路径,后面会用到。
在这里插入图片描述3.创建缓存文件并赋权

[root@php xcache-3.2.0]# touch /tmp/xcache
[root@php xcache-3.2.0]# chmod  777 /tmp/xcache 

4.复制xcache网站目录到php和httpd的网站根目录下

[root@php ~]# cd xcache-3.2.0/
[root@php xcache-3.2.0]# cp -r htdocs/ /var/www/benet/xcache
[root@php xcache-3.2.0]# scp -rp /var/www/benet/xcache/ root@192.168.1.61:/var/www/benet/
//cp一份到httpd服务器的网站根目录下

5.修改php配置文件,添加xcache参数并重启php

[root@php ~]# vim /etc/php.ini
添加到文件末尾:
[xcache-common]
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so 
//把xcache.so前的路径换成自己make install的最后一行路径
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
xcache.var_count =1
xcache.var_slots =8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval =300
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On
xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory =""
[root@php ~]# systemctl restart php-fpm

6.验证
访问http://192.168.1.61/xcache

在其他服务器中队192.168.1.61进行ab测试

[root@mysql ~]# yum -y install httpd-tools
[root@mysql ~]#  ab -c 100 -n 1000 http://192.168.1.61/

刷新xcache网页查看命中率