博文结构
Apache的Gzip(deflate)功能
Apache的缓存设置
Apache禁止目录遍历
Apache隐藏版本目录
Apache日志分割
Apache配置防盗链css
关于apache源码包安装参考apache安装及工做模式html
开启 apache 的 Gzip(deflate)功能 gzip 能够极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上,仍是至关不错的。 在 Apache2 以后的版本,模块名不叫 gzip,而叫 mod_deflate web
LoadModule deflate_module modules/mod_deflate.so //模块的做用:对传输到客户端的代码进行gzip压缩 LoadModule headers_module modules/mod_headers.so /模块的做用:告诉客户端的浏览器,传输的文件使用了gzip压缩。若是不开启的话,则没法正常显示网页内容
[root@localhost ~]# cd /usr/src/httpd-2.4.23/modules/filters/ //切换到Apache源码包mod_deflate所在的目录下 [root@localhost filters]# /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c //使用apxs命令进行安装
-i:表示须要执行安装操做,以安装一个或多个动态共享对象到服务器的modules目录中; -a:表示会自动增长一个 LoadModule 行到 httpd.conf 文件中,以启用此模块,或者,若是 此行已经存在,则启用之; -c:表示须要执行编译操做。
[root@localhost ~]# yum -y install zlib-develapache
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost /]# apachectl -t
Syntax OK
[root@localhost /]# apachectl restartvim
接下来修改Apache主配置文件,使其开启gzip压缩传输功能浏览器
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf <IfModule mod_deflate.c> DeflateCompressionLevel 9 SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/* SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary </IfModule> DeflateFilterNote Input input_info DeflateFilterNote Output output_info DeflateFilterNote Ratio ratio_info LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate CustomLog logs/deflate_log.log deflate
解释:缓存
<IfModule mod_deflate.c> DeflateCompressionLevel 9 \\压缩程度的等级,预设能够采用 6 这个数值,以维持 耗用处理器效能与网页压缩质量的平衡 SetOutputFilter DEFLATE \\设置输出过滤器,对输出启用压缩,必须的,就像一个 开关同样,告诉 apache 对传输到浏览器的内容进行压缩 AddOutputFilterByType DEFLATE text/* \\设置对文件是文本的内容进行压缩,例如 text/html text/css text/plain 等. SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary \\设置不对后缀 gif,jpg,jpeg,png 的图片文件进行压缩。注:?:表示不会捕获 ( )里内容了 </IfModule> DeflateFilterNote Input input_info \\声明输入流的 byte 数量 DeflateFilterNote Output output_info \\声明输出流的 byte 数量 DeflateFilterNote Ratio ratio_info \\声明压缩的百分比 LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate \\声明日志格式 CustomLog logs/deflate_log.log deflate //指定日志的存放路径
[root@localhost /]# vim /usr/local/http-2.4.23/htdocs/index.html 安全
[root@localhost /]# apachectl -t Syntax OK [root@localhost /]# apachectl restart
[root@localhost ~]# cat /usr/local/http-2.4.23/logs/deflate_log.log "GET / HTTP/1.1" 77/5265 (1%) "GET /favicon.ico HTTP/1.1" -/- (-%) "GET / HTTP/1.1" 77/5265 (1%) "GET / HTTP/1.1" 77/5265 (1%) [root@localhost ~]#
注:图片是不须要启用 GZip 压缩的,从 GZip 检测结果来看,压缩后的图片体积居然大过原 体积!这就解释了为何图片不用启用 GZip 压缩的缘由了服务器
这个是很是有用的优化,mod_expires 能够减小 20-30%左右的重复请求,让重复的用户对指定 的页面请求结果都 CACHE 在本地,根本不向服务器发出请求。但要注意更新快的文件不要 这么作。 这个模块控制服务器应答时的 Expires 头内容和 Cache-Control 头的 max-age 指令。有效期 (expiration date)能够设置为相对于源文件的最后修改时刻或者客户端的访问时刻网络
进入主配置里面搜索expires把前面#去掉
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
<IfModule mod_expires.c> ExpiresActive On ExpiresByType text/html "access plus 2 minute" ExpiresByType image/jpeg "access plus 1 mouth" ExpiresDefault "now plus 0 minute" </IfModule>
注释:
<IfModule mod_expires.c> //表示启用expires模块 ExpiresActive On //启用expires功能 ExpiresByType text/html "access plus 2 minute" //设置后缀为html的文本文件保存时间为两分钟 ExpiresByType image/jpeg "access plus 1 mouth" //设置后缀为jpeg的图片信息保存时间为一个月 ExpiresDefault "now plus 0 minute" //其余默认没有被定义的不进行缓存 </IfModule>
其中<base>是下列之一: • access • now (等价于'access ') • modification plus 关键字是可选的。<num>必须是整数,<type>是下列之一: • years • months • weeks • days • hours • minutes • seconds
[root@localhost ~]# cd /usr/local/http-2.4.23/htdocs/ [root@localhost htdocs]# mv index.html /index.html.bak [root@localhost htdocs]# mkdir aaa [root@localhost htdocs]# mkdir 123 [root@localhost htdocs]# vim /usr/local/http-2.4.23/conf/httpd.conf [root@localhost htdocs]# apachectl restar [root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf [root@localhost ~]# apachectl restart
报403没有权限访问
显示目录结构:把主配置文件里面刚删除的写回来
报200访问成功
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
进入主配置文件把前面#号去掉
[root@localhost /]# vim /usr/local/http-2.4.23/conf/extra/httpd-default.conf
找到 ServerTokens Full ServerSignature On 改为 ServerTokens Prod ServerSignatureoff 重启 apache 测试
[root@localhost /]# apachectl restart
[root@localhost /]# curl -I 127.0.0.1
能够看到apache版本号被隐藏了
#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服务的供应商名称 #define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服务的项目名称 #define AP_SERVER_BASEPRODUCT "Apache" #服务的产品名 #define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本号 #define AP_SERVER_MINORVERSION_NUMBER 4 #小版本号 #define AP_SERVER_PATCHLEVEL_NUMBER 23 #补丁级别 #define AP_SERVER_DEVBUILD_BOOLEAN 0 #
随着网站的访问愈来愈大,WebServer 产生的日志文件也会愈来愈大,若是不对日志进行分割,那么只能一次将大的日志(如 Apache 的日志)整个删除,这样也丢失了不少对网站比较宝贵的信息,由于这些日志能够用来进行访问分析、网络安全监察、网络运行情况监控等,所以管理好这些海量的日志对网站的意义是很大的。
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
修改Apache的主配置文件,更改内容以下: //找到如下两行,进行注释: ErrorLog logs/error_log CustomLog logs/access_log common //而后最好在CustomLog "logs/access_log" common配置的下一行添加以下内容(如下内容不能够直接复制,请看下面的解释): ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y-%m-%d.log 86400" CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y-%m-%d.log 86400" combined //这里是要填写rotatelogs工具的绝对路径
86400为轮转的时间,单位是秒(也就是一天生成一个日志文件)。
ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log 86400" CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
[root@localhost /]# ls /usr/local/http-2.4.23/logs/ access_20191221.log access-20191221.log access_log error_20191221.log error-20191221.log error_log httpd.pid [root@localhost /]#
因为 apache 自带的日志轮询工具 rotatelogs,听说在进行日志切割时容易丢日志,所以咱们一般使用 cronolog 进行日志轮询。
[root@localhost /]# tar zxf cronolog-1.6.2.tar.gz [root@localhost /]# cd cronolog-1.6.2/ [root@localhost cronolog-1.6.2]# ./configure && make && make install
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf //编辑Apache的主配置文件 //将方法1中写入的日志切割配置项删除,写入下面的两行配置 CustomLog "|/usr/local/sbin/cronolog logs/access-%Y-%m-%d.log" combined ErrorLog "|/usr/local/sbin/cronolog logs/error-%Y-%m-%d.log" //一样这里写的也是cronolog工具的绝对路径 为了更好的进行测试,建议将本来的日志文件进行删除、移动操做 [root@localhost ~]# rm -rf /usr/local/http-2.4.23/logs/*log [root@localhost ~]# ls /usr/local/http-2.4.23/logs/ httpd.pid [root@localhost ~]# ls /usr/local/http-2.4.23/logs/ access-2019-11-23.log error-2019-11-23.log httpd.pid //测试访问一下,访问日志和错误日志便可产生
[root@localhost /]# ls /usr/local/http-2.4.23/logs/
按天轮询: CustomLog "|/usr/local/sbin/cronolog logs/access_www_%Y%m%d.log" combined 按小时轮询: CustomLog "|/usr/local/sbin/cronolog logs /access_www_ %Y%m%d%H.log" combined
注意: 这两个管道日志文件程序还有一点不一样之处是使用 cronolog 时若是日志是放在某个不存 在的路径则会自动建立目录,而使用 rotatelogs 时不能自动建立,这一点要特别注意 !
有时候会忽然发现网站的访问量愈来愈,千万不要高兴的太早,颇有多是被别人盗链了。打个比方说:你本身搭建了一个视频网站,而后别人将他网站上的视频的地址重定向到你的服务器上。这样你的网站访问量就会愈来愈大,消耗的资源也就愈来愈多!如何避免这种可能的发生,那么就须要使用防盗链。
服务器配置以下:
用 rewrite 实现
下载俩个图片保存在
[root@localhost htdocs]# ls a.jpg b.jpg [root@localhost htdocs]# mkdir about [root@localhost htdocs]# mv a.jpg b.jpg about [root@localhost about]# mv b.jpg error.png [root@localhost htdocs]# cd about/ [root@localhost about]# ls a.jpg error.png [root@localhost about]# pwd /usr/local/http-2.4.23/htdocs/about
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf LoadModule rewrite_module modules/mod_rewrite.so //找到这一行,默认是注释的,将#号删除便可 …………………… <Directory "/usr/local/http-2.4.23/htdocs"> //必须写在网站的根目录下 RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://192.168.222.130/.*$ [NC] RewriteRule .*\.(gif|jpg|swf)$ http://192.168.222.130/about/error.png [R,NC,L] </Directory>
输入本地服务器的IP
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),忽略以后的规则
如图:
[root@localhost ~]# yum -y install httpd [root@localhost ~]# systemctl start httpd [root@localhost ~]# vim /var/www/html/index.html <a href="http://192.168.222.130/a.jpg">lianjie</a> \\编写一个超连接,指定服务器的IP
访问客户端IP