Apache默认虚拟主机、Apache用户认证、域名跳转\访问日志、访问日志不记录静态文件、访问日志切割、静态元素过期时间

一、Apache默认虚拟主机

这里写图片描述
默认虚拟主机,可以理解成Apache(也就是httpd),一个服务下面跑多了多个网站,跑了多个域名 - 例子,假如在服务器上,它既能访问百度,又能访问谷歌,这是两个不同的网站,但同时都在一台服务器运行着,就用了一个httpd的服务,这个就是一个网站多个域名,每一个域名对着一个虚拟主机 ## 更改hosts - 在windows下去写hosts 1. hostsl路径地址,这个和linux下的hosts类似

打开物理机C盘-选择Windows-选择System32-选择dirvers-选择etc-选择hosts

可以在这个里面定义一个IP,定义一个域名,然后让这个域名指向到这个IP上去

打开方式选择 记事本

打开文件,会看到windows下的hosts

然后在hosts文件中,任何一处位置加入一行,然后保存!

格式:先IP,然后空格,加域名——>域名可以写多个,一行里面可以有多个域名

这个IP地址为虚拟机的IP

这里写图片描述
然后在物理机cmd,ping一下网址,发现能ping通
这里写图片描述
正常情况下,不写hosts,将hosts中添加的一行注释掉,然后再去物理机去ping www.abc.com,会看到IP是公网IP

这个就是hosts的作用,它的目的就是让你临时访问到一个服务器上去

比如用www.abc.com,用www.123.com把这个域名指向到这台机器上去,这是在DNS还没有生效的时候使用

在hosts将#号去掉,恢复,再用物理机中的浏览器去访问www.abc.com或www.123.com,会看到正常访问

It works!

浏览器去访问www.123.com/1.php,会看到正常访问
这里写图片描述
或许会有一个疑问,123.com和abc.com,包括这个IP并没有在httpd的配置文件中去定义它,在配置文件中仅仅定义了 www.example.com这个域名,这个叫做Apache的默认主机 ,也就是说,任何一个域名,指向到这个 IP ,它都会访问到这个站点,这个站点就叫做默认虚拟主机——>注意:是虚拟主机

如果没有做任何操作,仅仅使用了httpd.conf,它实际上就是主配置文件定义的这个ServerName,以DocumentRoot ,但这样不太好管理,毕竟一台服务器上可以跑多个域名,若不想域名都指向到这里,所以需要打开一个虚拟主机配置文件

打开虚拟主机,在/usr/local/apache2.4/conf/httpd.conf 配置文件中

[root@han01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf       

这一行就做虚拟主机,去掉#号

因为配置文件仅仅能定义一个ServerName,所以现在打开一个二级配置文件

二级配置文件就是虚拟主机配置文件

在这个配置文件里,是可以定义多个ServerName的

[root@han01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf             #虚拟主机配置文件

修改成以下内容

# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias www.abc.com www.123.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

更改完配置文件,就去创建对应的目录

[root@han01 ~]# mkdir /data/wwwroot/
[root@han01 ~]# mkdir /data/wwwroot/abc.com
[root@han01 ~]# mkdir /data/wwwroot/111.com

在对应的站点根目录下创建,定义一个php

[root@han01 ~]# vim /data/wwwroot/abc.com/index.php

写入

<?php
echo "abc.com";

同理,在/data/wwwroot/111.com/index.php中也定义一个php

[root@han01 ~]# vim /data/wwwroot/111.com/index.php

写入

<?php
echo "abc.com";

在定义完之后,去检查服务是否有错误

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK

重新加载配置文件

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful

定义一个网站最核心的参数就是网站的根目录在哪里,访问的域名是什么,ServerName只能写一个,而ServerAlias可以写多个域名

虚拟主机常识

一旦让虚拟主机配置文件生效了,那么之前定义的www.example.com就会失效了

测试虚拟主机

curl -x命令

比如说,现在要访问abc,com,若不去绑定hosts,那么在虚拟机中ping www.abc.com会ping到外网上去,并没有在这台机器上。若想要访问abc.com在在这台机器上,可以编辑/etc/hosts文件去指定下,或者使用curl -x选项

[root@han01 ~]# curl -x192.168.0.115:80 abc.com
abc.com[root@han01 ~]# curl -x192.168.0.115:80 www.abcd.com
abc.com[root@han01 ~]# curl -x192.168.0.115:80 www.abcde.com

在访问abcd.com,会发现访问的还是abc.com,这个之前无论把任何域名指向到192.168.188.130这台机器上,都会访问到htdocs目录下面去,但现在发生了转变,无论什么域名指向过来,它都会访问到abc.com,abc.com是我们虚拟主机配置文件里边的第一个虚拟主机,它就是默认虚拟主机。

默认虚拟主机,就是无论访问什么域名,只要解析到192.168.188.130IP上,它都会访问这个网站对应的虚拟主机配置(这个默认虚拟主机就是abc.com)

这时再来访问www.example.com

abc.comroot@han01 ~]# curl -x192.168.0.115:80 www.example.com
111.com[root@han01 ~]#

在httpd主配置文件中有定义,在Virtual hosts虚拟主机中也有定义,结果访问到了111.com

总结

在主配置文件中,httpd.conf里面,打开了虚拟主机配置文件,也就是删除到 # 号,那虚拟主机配置就生效了,一旦虚拟主机配置文件生效,那主配置文件里面所定义的DocumentRoot以及ServerName失效

虚拟主机配置文件一旦打开,可以定义很多个VirtualHost,每一个VirtualHost都都有一个对应的 DocumentRoot 和 ServerName ,每一个VirtualHost都代表着一个站点,都是一个虚拟主机。在虚拟主机里面有一个特殊的默认虚拟主机,所谓默认虚拟主机就是无论任何域名解析到这个IP上,都会去访问默认虚拟主机

二、Apache用户认证

本章使用浏览器进行检测的前提是在物理机hosts文件添加虚拟机IP和虚拟主机域名。

配置用户认证

编辑虚拟主机配置文件“httpd-vhosts.conf”。

[root@han01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
修改
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    <Directory /data/wwwroot/111.com>       #指定认证的目录
        Allowoverride AuthConfig           #该行相当于打开用户认证的开关
        AuthName "111.com user auth"         #自定义认证的名字,作用不大
        AuthType Basic                       #认证类型,一般为basic
        AuthUserFile /data/.htpasswd             #指定密码文件所在位置(需要手动添加)
        require valid-user                        #设定需要认证的用户为“AuthUserFile”中定义的所有可用用户
     </Directory>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

创建“httpd-vhosts.conf”中指定的密码文件

[root@han01 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd qwe
New password: 
Re-type new password: 
Adding password for user qwe
[root@han01 ~]# cat /data/.htpasswd
qwe:$apr1$Kn27KIiK$FPZHTPx.STyEzSzz3MjFe1

在“/data/.htpasswd”为用户adai(自动创建)创建一个使用MD5算法加密的密码文件。
注意: 只有在第一次创建该文件时加-c选项。

配置完成后重新加载

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful

测试

[root@han01 ~]# curl -x192.168.0.115:80 111.com -I
HTTP/1.1 401 Unauthorized
Date: Fri, 29 Jun 2018 10:27:14 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1

此时提示状态码为“401”,说明当前所访问的内容需要进行用户认证。

使用用户&密码访问:

[root@han01 ~]# curl -x192.168.0.115:80 -uqwe:123 111.com -I
HTTP/1.1 200 OK
Date: Fri, 29 Jun 2018 10:32:30 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8

状态码“200”,即访问成功。

htpasswd命令

htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。

语法: htpasswd [option] [参数]

Options:
-c:=create,创建一个加密文件
-n:不更新加密文件,只将更新后的用户名密码显示在屏幕上
-m:使用MD5算法对密码进行加密(默认)
-d:使用CRYPT算法对密码进行加密
-p:不对密码进行加密,即明文密码
-s:使用SHA算法对密码进行加密
-b:在命令行一并输入用户名和密码,而不是根据提示输入密码
-D:删除指定用户

应用

对网站中指定文件设置用户认证!

虚拟主机配置

[root@han01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    #<Directory /data/wwwroot/111.com>
    <FilesMatch 123.php>
        Allowoverride AuthConfig
        AuthName "111.com user auth"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
     </FilesMatch>
     #</Directory>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

释掉< Directory >,取消对目录设定的用户认证,更改为< FilesMatch>,即对文件设定用户认证

[root@han01 ~]# curl -x192.168.0.115:80 111.com
welcome to 111.com  

[root@han01 ~]# curl -x192.168.0.115:80  111.com/123.php -I
HTTP/1.1 401 Unauthorized
Date: Mon, 31 Jul 2017 03:04:31 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1

此时可以自由访问“111.com”指定的目录,但是当访问目录下的“123.php”文件时会报错:401,即,需要进行用户认证。

使用指定用户名&密码访问:

[root@han01 ~]# curl -x192.168.0.115:80  -uqwe:123 111.com/123.php welcom to 123file


三、域名跳转\访问日志

域名跳转分类及区别

种类:
301表示永久跳转;302表示临时跳转。

区别:
302跳转是暂时的跳转,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。

301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。

SEO使用方式不同

在搜索引擎优化中302跳转被众多黑帽SEO优化人员追求,对网站进行恶意302跳转至非用户目标访问网站,因此搜索引擎对于网站的302跳转通常是比较不友好,所以要慎用302跳转!

SEO

SEO(Search Engine Optimization)搜索引擎优化,在了解搜索引擎自然排名机制的基础上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中的关键词自然排名,获得更多流量,从而达成网站销售及品牌建设的预期目标。

域名跳转配置
配置虚拟主机配置文件:httpd-vhosts.conf。

[root@han01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
    #需要mod_rewrite的支持
        RewriteEngine on
        #开启rewrite功能
        RewriteCond %{HTTP_HOST} !^111.com$
        #Cond=condition,定义rewrite条件:所有非111.com的主机名(域名)
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
        #定义rewrite规则:当满足上面条件时才执行当前规则,即跳转到111.com。
    </IfModule>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

检查系统配置

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful
root@han01 ~]# /usr/local/apache2.4/bin/apachectl -M

在此检查Apache是否加载了虚拟主机配置中调用的rewrite模块,如果没有加载,需要编辑Apache配置文件“httpd.conf”

[root@han01 ~]# vim /usr/local/apache2.4/conf/httpd.conf   
……
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module        modules/libphp5.so
#LoadModule php7_module        modules/libphp7.so

去掉注释符号“#”,加载rewrite模块

检测

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite

使用curl检测

[root@han01 ~]# curl -x192.168.0.115:80 www.example.com -I
HTTP/1.1 301 Moved Permanently

状态码为301,即设定了域名永久跳转!

在浏览器进行检测时,访问“www.example.com”会直接跳转到“111.com”。

访问日志

日志文件所在位置

[root@han01 ~]# ls /usr/local/apache2.4/logs
111.com-access_log  abc.com-access_log  access_log  httpd.pid
111.com-error_log   abc.com-error_log   error_log

自定义日志格式

系统自带日志格式

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

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
#h表示host来源IP,l表示login用户,u表示user用户密码,t表示time时间,r表示request(行为),s表示status状态码,b表示byte大小
#user-agent:用户代理
#referer:跳转到当前位置的上一个网址(即:提供当前IP的网站)

有combine和common两种格式,默认使用common模式。

配置日志格式

编辑虚拟主机配置文件“httpd-vhosts.conf”

[root@han01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^111.com$
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
    </IfModule>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" combined
</VirtualHost>

将日志文件后面原有 common改为combined。

重新加载

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful

样式

[root@han01 ~]# cat /usr/local/apache2.4/logs/111.com-access_log


四、访问日志不记录静态文件

编辑虚拟主机配置文件“httpd-vhosts.conf”:

[root@han01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^111.com$
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
    </IfModule>
    ErrorLog "logs/111.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img 
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img  
    #以上为定义变量:将所有关于图片的请求定义为变量img
    CustomLog "logs/111.com-access_log" combined env=!img
    #“env=!img”表示非img变量。本行命令的含义是:不记录关于变量img的请求日志。
</VirtualHost>

说明: 将所有访问图片的请求定义为变量img,在访问记录(日志)中将其排除即可。重新加载后使用curl访问img变量中所指定格式的文件内容时将不会产生访问记录。

五、访问日志切割目录概要

日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
把虚拟主机配置文件改成如下

打开配置文件,更改CustomLog配置,指定一个工具rotatelogs,在定义一个日志的名称%Y%m%d,规定时间去生成,时间段就为1天,换算成秒,就是86400秒

[root@han01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
rotatelogs工具,它是Apache自带的一个切割工具
-l参数,目的是以当前系统时间为基准。如果不指定 -l ,那么就会指定 UTC时间 的格式去切割日志
在中国应该是 CST,在美国是 UTC ,两者时区不同,相差几个小时

定义日志的名称,因为是切割的,所以根据时间日期让它自动变,就需要加一个变量%Y%m%d
%Y,表示 年
%m,表示 月
%d,表示 日
按规定时间去生成,时间段为1天,换算成秒,就是86400秒

然后查看配置文件语法有无错误,并重新加载配置文件

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful

做一些访问,因为还没有任何的日志生成,在这个目录下还没有生成一个新的文件

[root@han01 ~]# ls /usr/local/apache2.4/logs
111.com-access_log  abc.com-access_log  access_log  httpd.pid
111.com-error_log   abc.com-error_log   error_log

用curl -x命令访问后,再次ls /usr/local/apache2.4/logs会出现一个以日期为后缀的新日志文件

cat一下发现,就是刚刚curl命令访问的

在以后的凌晨0点的时候,就会生成一个新的日志

另外还需要做一个任务计划,超过一个月或两个月的日志删除,如果不删除,那是否切割日志就没有意义了

做日志切割的目的,是为了防止磁盘写满,另一个目的就是为了更方便的去管理日志

六、静态元素过期时间

浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了 增加配置
<IfModule mod_expires.c>
    ExpiresActive on  //打开该功能的开关
    ExpiresByType image/gif  "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
</IfModule>
需要expires_module
curl测试,看cache-control: max-age
配置静态元素过期时间

静态元素,就是访问的图片、css、js

当用浏览器去访问一个网站的时候,这个网站里所有的静态文件(比如图片的样式、js),浏览器就会默认把静态文件缓存在电脑里,叫做临时的目录或目录

缓存的时间是在服务器上定义的,如果不去定义,那么浏览器也不会把这些文件清空,或者浏览器有自己的机制去清空这些文件,或者说电脑软件会定时帮你清理这些缓存的文件

为什么电脑会自动加载这些静态文件呢?目的就是第二次,第三次访问的时候,不去服务器去下载这些静态文件了

在使用浏览器自带的F12键去进行比对,第一次访问一个图片的时候是200的状态码,第二次访问的时候,就是304,它检测到下载的图片并没有修改过,所以就不会重新到服务器下载一次,这样可以节省带宽,但没有规定缓存什么时候清空,什么时候去服务器上去下载,再次下载,因为只要浏览器检测到图片未做更改,它这个状态码就一直为304,304这个状态码就意味着他不会去服务器下载

定义静态文件失效日期

expires_module模块,定义失效日期

打开虚拟主机配置文件vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,并添加配置文件

需要添加的配置文件

  • 这里有所有的图片定义成一天
  • 所有的 css 和 js 都定义成两小时
  • 其他的没有任何的缓存
<IfModule mod_expires.c>
    ExpiresActive on      //打开该功能的开关
    ExpiresByType image/gif  "access plus 1 days"    //定义Type类型,这里是一天
    ExpiresByType image/jpeg "access plus 24 hours"        //定义Type类型,这里是24小时
    ExpiresByType image/png "access plus 24 hours"        //定义Type类型
    ExpiresByType text/css "now plus 2 hour"                        //定义Type类型,两小时
    ExpiresByType application/x-javascript "now plus 2 hours"       // 定义Type类型
    ExpiresByType application/javascript "now plus 2 hours"        //定义Type类型
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"        //定义Type类型
    ExpiresDefault "now plus 0 min"            //定义Type类型
</IfModule>

打开配置文件,修改

[root@han01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com 2111.com.cn
    #<Directory /data/wwwroot/111.com> 
    #<FilesMatch 123.php>
    #    AllowOverride AuthConfig 
    #    AuthName "111.com user auth"
    #    AuthType Basic 
    #    AuthUserFile /data/.htpasswd  
    #    require valid-user
    # </FilesMatch>
    #</Directory>
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^111.com$
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
   </IfModule>
<IfModule mod_expires.c>
    ExpiresActive on  
    ExpiresByType image/gif  "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
</IfModule>
    ErrorLog "logs/111.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img
   CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>

检查是否存在语法错误

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK

查看expire模块是否打开,会发现expire模块没有打开

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire

编辑主配置文件,打开expire模块

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

LoadModule expires_module modules/mod_expires.so    将这行的#号去掉

重新加载配置文件,并查看expire模块

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire
 expires_module (shared)

按ctrl+F5可以强制把浏览器本地的缓存清空

用curl命令去访问图片

[root@han01 ~]# curl -x192.168.0.115 111.com/11.png -I

若是将expire模块去除,再去curl命令查看图片,就无法看到Cache-Control参数

扩展:

apache虚拟主机开启php的短标签 http://ask.apelearn.com/question/5370
apache日志记录代理IP以及真实客户端IP http://ask.apelearn.com/question/960
apache只记录指定URI的日志 http://ask.apelearn.com/question/981
apache日志记录客户端请求的域名 http://ask.apelearn.com/question/1037
apache 日志切割问题 http://ask.apelearn.com/question/566

猜你喜欢

转载自blog.csdn.net/iamfishhh/article/details/80853903