LAMP架构(二)

httpd的默认虚拟主机

一台服务器可以访问多个网站,每个网站都是一个虚拟主机

概念:域名(主机名)、DNS、解析域名、hosts

任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

就好像在windows中的hosts文件中可以定义多个域名指向一个IP一样,apache中配置文件中也是类似的。

  [root@zyshanlinux-001 ~]# vim /usr/local/apache2.4/conf/httpd.conf

就是DocumentRoot这个参数定义了网站的根目录在哪里

它的域名就是ServerName定义的www.example.com:80

场景:一台服务器中可以跑多个域名,这么多的域名都指向到这个服务器,而且一个配置文件中只能定义一个ServerName,为了不都指向这服务器和便于管理,可以打开一个虚拟主机配置文件(二级配置文件)。

首先打开/usr/local/apache2.4/conf/httpd.conf配置文件,搜索extra找到这行去掉#,取消前面的DocumentRoot和ServerName

打开一个虚拟主机配置文件(二级配置文件)

  [root@zyshanlinux-001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  
  <VirtualHost *:80>
      ServerAdmin [email protected]  ##管理员的邮箱可以去掉
      DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"  ##定义网站根目录
      ServerName dummy-host.example.com  ##域名
      ServerAlias www.dummy-host.example.com  ##别名
      ErrorLog "logs/dummy-host.example.com-error_log"  ##错误日志
      CustomLog "logs/dummy-host.example.com-access_log" common  ##访问日志
  </VirtualHost>

修改配置,<VirtualHost *:80>中*可以用IP代替,端口可以定义

  <VirtualHost *:80>
      ServerAdmin [email protected]
      DocumentRoot "/data/wwwroot/zyshan.com"
      ServerName zyshan.com
      ServerAlias www.zyshan.com www.zys.com
      ErrorLog "logs/zyshan.com-error_log"
      CustomLog "logs/zyshan.com-access_log" common
  </VirtualHost>
  
  <VirtualHost *:80>
      DocumentRoot "/data/wwwroot/123.com"
      ServerName www.123.com
      ServerAlias www.example.com
      ErrorLog "logs/123.com-error_log"
      CustomLog "logs/123.com-access_log" common
  "/usr/local/apache2.4/conf/extra/httpd-vhosts.conf" 41L, 1310C

保存配置文件

  [root@zyshanlinux-001 ~]# mkdir /data/wwwroot/  ##新建对应的网站根目录
  [root@zyshanlinux-001 ~]# mkdir /data/wwwroot/zyshan.com  ##新建对应的网站根目录
  [root@zyshanlinux-001 ~]# mkdir /data/wwwroot/123.com  ##新建对应的网站根目录
  [root@zyshanlinux-001 ~]# vim /data/wwwroot/zyshan.com/index.php  ##定义index.php
  [root@zyshanlinux-001 ~]# vim /data/wwwroot/123.com/index.php
  ##2个index.php都是配置了类似的内容##
  +++++++++++++++++
  <?php
  echo "zyshan.com";  ##不要忘记“;”
  +++++++++++++++++
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -t
  Syntax OK
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl graceful

学习一个命令:curl -xIP:端口+域名

输出结果没问题,可以访问到我们配置的虚拟默认主机(与上上段代码对应看,就是虚拟主机配置文件对应看)。

  [root@zyshanlinux-001 ~]# curl -x192.168.106.128:80 www.zyshan.com
  zyshan.com[root@zyshanlinux-001 ~]# curl -x192.168.106.128:80 www.zys.com
  zyshan.com[root@zyshanlinux-001 ~]# curl -x192.168.106.128:80 zys.com
  zyshan.com[root@zyshanlinux-001 ~]# curl -x192.168.106.128:80 www.123.com
  123.com[root@zyshanlinux-001 ~]# curl -x192.168.106.128:80 123.com
  zyshan.com[root@zyshanlinux-001 ~]# curl -x192.168.106.128:80 www.example.com
  123.com[root@zyshanlinux-001 ~]# 

每次更改配置参数都记得:检查语法,加载配置这2步。

[root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -tSyntax OK[root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl graceful

如果想在windows系统中测试,需要修改hosts文件:

hosts文件权限问题打不开,win+R,输入hosts文件目录路径

在hosts文件目录里点击左上角,选择文件菜单打开,点击Windows PowerShell ,再点击以管理员身份打开

点击管理员后身份打开后会弹出一个窗口,点击“是”即可

在终端中输入cmd并回车,进入了管理员界面;输入命令行notepad hosts并回车

成功地打开了hosts,然后就可以编辑了,可以粘贴,复制等操作:

保存后,用浏览器打开www.zyshan.comwww.123.com,成功访问

httpd的用户认证

1、对目录进行访问需要验证:

修改配置文件,第一个是默认的虚拟主机,所以修改第二个

  [root@zyshanlinux-001 ~]# vim !$
  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             ##指定需要认证的用户为全部可用用户
      </Directory>
      ErrorLog "logs/111.com-error_log"
      CustomLog "logs/111.com-access_log" common
  </VirtualHost>
  ++++++++++++++++++++++++++++++++++++++++++++++

用apache自带的密码生成工具生成密码到指定目录路径/data/.htpasswd

-c创建,-m以MD5的加密方法,指定密码文件和增加用户名

  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd zyshan
  New password: 
  Re-type new password: 
  Adding password for user zyshan
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd grg
  ##第二次为新用户设置密码不用-c创建密码文件了,在第一次创建的文件中继续写就可以了##
  New password: 
  Re-type new password: 
  Adding password for user grg
  [root@zyshanlinux-001 ~]# cat /data/.htpasswd  ##可以看到密码文件的内容,两个用户的信息##
  zyshan:$apr1$SWufw6O4$saTOyxF3Q8n6ldZg9ec8h/
  grg:$apr1$2LGcmk7z$NgOlEqZ2/BXNhH9FcGQZw.

配置好/usr/local/apache2.4/conf/extra/httpd-vhosts.conf文件,创建密码,检查语法加载配置

缺乏网站根目录数据,新建目录,编辑php文件,再检查语法,加载配置OK

  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -t
  AH00112: Warning: DocumentRoot [/data/wwwroot/111.com] does not exist
  Syntax OK
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl graceful
  AH00112: Warning: DocumentRoot [/data/wwwroot/111.com] does not exist
  [root@zyshanlinux-001 ~]# mkdir -p /data/wwwroot/111.com
  [root@zyshanlinux-001 ~]# vim /data/wwwroot/111.com/index.php
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -t
  Syntax OK
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl graceful

命令行测试,用curl连接,出现401状态,是一个需要用户验证的状态

  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 111.com
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <html><head>
  <title>401 Unauthorized</title>
  </head><body>
  <h1>Unauthorized</h1>
  <p>This server could not verify that you
  are authorized to access the document
  requested.  Either you supplied the wrong
  credentials (e.g., bad password), or your
  browser doesn't understand how to supply
  the credentials required.</p>
  </body></html>
  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 111.com -I
  HTTP/1.1 401 Unauthorized
  Date: Wed, 27 Jun 2018 15:04:19 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
  
  [root@zyshanlinux-001 ~]#
  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 -ugrg:grg 111.com -I  ##命令输入用户密码
  HTTP/1.1 200 OK  ##通过验证
  Date: Wed, 27 Jun 2018 15:11:41 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
  
  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 -ugrg:grg 111.com  ##成功登录
  welcome 111.com[root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 -ugrg:gr 111.com  ##故意数错密码
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <html><head>
  <title>401 Unauthorized</title>  ##又是401状态,需要验证
  </head><body>
  <h1>Unauthorized</h1>
  <p>This server could not verify that you
  are authorized to access the document
  requested.  Either you supplied the wrong
  credentials (e.g., bad password), or your
  browser doesn't understand how to supply
  the credentials required.</p>
  </body></html>
  

绑定hosts(把111.com添加到hosts文件里面去),浏览器测试,成功弹出验证界面

2、匹配单个文件进行验证:

配置文件

  [root@zyshanlinux-001 ~]# 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
  +++++++++++++++++++++++++++++++++++++++++++++++    
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -t
  Syntax OK
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl graceful
  [root@zyshanlinux-001 ~]# vim /data/wwwroot/111.com/123.php  ##增加了123.php,就要创建编辑它

配置完成,原本的目录验证就是不需要验证的200状态,反而到目录下的123.php访问是才显示401要验证状态,用-u输入用户名和密码才能成功访问到指定需要验证的文件

  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 111.com
  welcome 111.com[root@zyshanlinux-001 ~]# 
  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 111.com -I
  HTTP/1.1 200 OK
  Date: Wed, 27 Jun 2018 15:26:44 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
  
  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 111.com/123.php -I
  HTTP/1.1 401 Unauthorized
  Date: Wed, 27 Jun 2018 15:27:03 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
  
  [root@zyshanlinux-001 ~]# 
  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 -ugrg:grg 111.com/123.php -I
  HTTP/1.1 200 OK
  Date: Wed, 27 Jun 2018 15:31:08 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
  
  [root@zyshanlinux-001 ~]# curl -x127.0.0.1:80 -ugrg:grg 111.com/123.php

域名跳转(也叫域名重定向)

场景:

1、换了新域名后,为了不损失了老域名的老用户,需要域名跳转,保留了老用户。

2、权重问题,老域名属于正主,新域名类似冒牌,为了加重新域名的权重,加了域名跳转提升了新域名的权重。

3、定义了状态码301,叫做永久重定向,会降低老域名的权重;302是临时重定向,不会降低老域名的权重。

步骤:

1、修改虚拟主机配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

  <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>  ##需要mod_rewrite模块支持
          RewriteEngine on  ##打开rewrite功能
          RewriteCond %{HTTP_HOST} !^111.com$  ##定义rewrite的条件,主机名(域名)不是111.com满足条件(!^111.com$相当于正则,!取反,^限制开头,$定义结尾;不然带111.com的域名都起作用)         
          RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]  ##定义rewrite规则,当满足上面的条件时,这条规则才会执行(^/(.*)$代表域名后面的地址,类似111.com/123.php等;$1 [R=301,L]中,$1代表前面的括号点星【RewriteRule ^/(.*)/([1-9]+)$ http://111.com/$1/$2 [R=301,L]】,301永久重定向更改权重,L代表last只跳转一次) 
      </IfModule>
      ErrorLog "logs/111.com-error_log"
      CustomLog "logs/111.com-access_log" common
  </VirtualHost>
  
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -t
  Syntax OK
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl graceful

2、查看rewrite模块是否打开,没打开进入/usr/local/apache2.4/conf/httpd.conf去#号调用该模块

  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite  ##检查rewrite模块是否存在
  [root@zyshanlinux-001 ~]# vi /usr/local/apache2.4/conf/httpd.conf
  
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  #LoadModule userdir_module modules/mod_userdir.so
  LoadModule alias_module modules/mod_alias.so
  LoadModule rewrite_module modules/mod_rewrite.so  ##把该行的#去掉,调用了rewrite模块。
  #LoadModule php5_module        modules/libphp5.so
  LoadModule php7_module        modules/libphp7.so
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -t
  Syntax OK
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
   rewrite_module (shared)
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl graceful

80端口监听全网,三个冒号代表三块有IP的网卡。

3、curl测试

  [root@zyshanlinux-001 ~]# curl -x192.168.106.150:80 http://111.com/123.php -I
  HTTP/1.1 200 OK
  Date: Thu, 28 Jun 2018 12:50: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
  
  [root@zyshanlinux-001 ~]# curl -x192.168.106.150:80 2111.com.cn -I
  HTTP/1.1 301 Moved Permanently
  Date: Thu, 28 Jun 2018 12:53:44 GMT
  Server: Apache/2.4.33 (Unix) PHP/7.1.6
  Location: http://111.com/
  Content-Type: text/html; charset=iso-8859-1
  
  [root@zyshanlinux-001 ~]# curl -x192.168.106.150:80 www.example.com -I
  HTTP/1.1 301 Moved Permanently
  Date: Thu, 28 Jun 2018 12:54:03 GMT
  Server: Apache/2.4.33 (Unix) PHP/7.1.6
  Location: http://111.com/
  Content-Type: text/html; charset=iso-8859-1

apache访问日志

日志存放目录,查看日志

  [root@zyshanlinux-001 ~]# ls /usr/local/apache2.4/logs/
  111.com-access_log  123.com-access_log  access_log  httpd.pid              zyshan.com-error_log
  111.com-error_log   123.com-error_log   error_log   zyshan.com-access_log
  [root@zyshanlinux-001 ~]# ls /usr/local/apache2.4/logs/111.com-access_log
  /usr/local/apache2.4/logs/111.com-access_log
  [root@zyshanlinux-001 ~]# cat !$
  cat /usr/local/apache2.4/logs/111.com-access_log

日志格式:vim /usr/local/apache2.4/conf/httpd.conf 搜索LogFormat

  <IfModule log_config_module>
      #
      # The following directives define some format nicknames for use with
      # a CustomLog directive (see below).
      #
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
      LogFormat "%h %l %u %t \"%r\" %>s %b" common  ##默认格式

选用日志格式:

      </IfModule>
      ErrorLog "logs/111.com-error_log"
      CustomLog "logs/111.com-access_log" combined  ##common默认格式改为combined复杂格式
  </VirtualHost>
  

combined格式会显示出你浏览器的信息,用户信息,从哪里跳转到该地址。

查看日志:tail /usr/local/apache2.4/logs/111.com-access_log

访问日志不记录静态文件

网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 ,节省空间内存

修改虚拟主机配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

      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 "logs/111.com-access_log" combined env=!img  ##以img标记的取反,就是带img的都不记录进日志

测试结果:

  [root@zyshanlinux-001 ~]# curl -x192.168.106.150:80 http://111.com/index.php/difjd.jpg -I
  HTTP/1.1 200 OK
  Date: Thu, 28 Jun 2018 13:51:46 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
  
  [root@zyshanlinux-001 ~]# tail /usr/local/apache2.4/logs/111.com-access_log
  ...
  192.168.106.128 - - [28/Jun/2018:21:51:46 +0800] "HEAD http://111.com/index.php/difjd.jpg HTTP/1.1" 200 - "-" "curl/7.29.0"
  [root@zyshanlinux-001 ~]# /usr/local/apache2.4/bin/apachectl graceful
  [root@zyshanlinux-001 ~]# curl -x192.168.106.150:80 http://111.com/index.php/difjd.jpg -I
  HTTP/1.1 200 OK
  Date: Thu, 28 Jun 2018 13:51:46 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
  
  [root@zyshanlinux-001 ~]# tail /usr/local/apache2.4/logs/111.com-access_log
  ...
  192.168.106.128 - - [28/Jun/2018:21:51:46 +0800] "HEAD http://111.com/index.php/difjd.jpg HTTP/1.1" 200 - "-" "curl/7.29.0"
  ##这里应该多一条记录的,但加载配置生效了,带jpg的访问就不记录入日志了

用rz命令把一张图片上传到linux,用浏览器测试:

测试结果,仍然是没有把这次访问记录进日志中,是因为指定了标签

取消vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf配置里面的env=!img这句,重新加载配置,日志就会把所有访问都记录下来,包括图片png的访问

访问日志切割

日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件

修改虚拟主机配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

  ##rotatelogs是apache的切割工具,-l是指定按系统时间,如果不指定,它默认用UST美国时区,中国是STC,命名以日期%Y%m%d年月日,切割时间段,每86400秒切割一次。##
  CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

访问记录就写入每天切割的文件里,每天凌晨切割一次,以后写一个任务计划,定期删除。

  [root@zyshanlinux-001 111.com]# curl -x127.0.0.1:80 111.com -I
  HTTP/1.1 200 OK
  Date: Thu, 28 Jun 2018 14:25:42 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
  
  [root@zyshanlinux-001 111.com]# curl -x127.0.0.1:80 111.com/123.php -I
  HTTP/1.1 200 OK
  Date: Thu, 28 Jun 2018 14:26:23 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
  
  [root@zyshanlinux-001 111.com]# ls /usr/local/apache2.4/logs/
  111.com-access_20180628.log  111.com-error_log   123.com-error_log  error_log  zyshan.com-access_log
  111.com-access_log           123.com-access_log  access_log         httpd.pid  zyshan.com-error_log
  [root@zyshanlinux-001 111.com]# ls /usr/local/apache2.4/logs/111.com-access_20180628.log
  /usr/local/apache2.4/logs/111.com-access_20180628.log
  [root@zyshanlinux-001 111.com]# cat !$
  cat /usr/local/apache2.4/logs/111.com-access_20180628.log
  127.0.0.1 - - [28/Jun/2018:22:25:42 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 200 - "-" "curl/7.29.0"
  127.0.0.1 - - [28/Jun/2018:22:26:23 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0"

静态元素过期时间

浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了

在访问图片的时候,系统会自动缓存图片,我们可用过在浏览器上按F12查看,第一次访问图片的时候是200状态码,第二次访问相同的图片时,则是304的状态码,即没有更改。意思是说用第一次缓存本地的图片而没有去下载

更改虚拟主机配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

检查语法,加载配置,检查expire模块启动没

  [root@zyshanlinux-001 111.com]# /usr/local/apache2.4/bin/apachectl -t
  Syntax OK
  [root@zyshanlinux-001 111.com]# /usr/local/apache2.4/bin/apachectl graceful
  [root@zyshanlinux-001 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expire
  [root@zyshanlinux-001 111.com]#

expire模块没有启动,到主配置vim /usr/local/apache2.4/conf/httpd.conf搜索expire去#号调用expire模块

  #LoadModule logio_module modules/mod_logio.so
  LoadModule env_module modules/mod_env.so
  LoadModule expires_module modules/mod_expires.so  ##这里
  LoadModule headers_module modules/mod_headers.so
  #LoadModule unique_id_module modules/mod_unique_id.so
  
  [root@zyshanlinux-001 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expire
   expires_module (shared)
  [root@zyshanlinux-001 111.com]# curl -x127.0.0.1:80 111.com/zz.png -I
  HTTP/1.1 200 OK
  Date: Thu, 28 Jun 2018 15:14:57 GMT
  Server: Apache/2.4.33 (Unix) PHP/7.1.6
  Last-Modified: Wed, 16 Aug 2017 14:02:27 GMT
  ETag: "5a8a1-556df588ec2c0"
  Accept-Ranges: bytes
  Content-Length: 370849
  Cache-Control: max-age=86400  ##多了这行,定义了过期时间
  Expires: Fri, 29 Jun 2018 15:14:57 GMT
  Content-Type: image/png
  ##取消expire模块,就会没有过期时间的限制##
  [root@zyshanlinux-001 111.com]# vim /usr/local/apache2.4/conf/httpd.conf
  [root@zyshanlinux-001 111.com]# /usr/local/apache2.4/bin/apachectl -t
  Syntax OK
  [root@zyshanlinux-001 111.com]# /usr/local/apache2.4/bin/apachectl graceful
  [root@zyshanlinux-001 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expire
  [root@zyshanlinux-001 111.com]# curl -x127.0.0.1:80 111.com/zz.png -I
  HTTP/1.1 200 OK
  Date: Thu, 28 Jun 2018 15:10:05 GMT
  Server: Apache/2.4.33 (Unix) PHP/7.1.6
  Last-Modified: Wed, 16 Aug 2017 14:02:27 GMT
  ETag: "5a8a1-556df588ec2c0"
  Accept-Ranges: bytes
  Content-Length: 370849
  Content-Type: image/png
  

200状态码:成功

301状态码:永久重定向

301状态码:临时重定向

304状态码:没有更改

400状态码:错误请求

401状态码:未授权

403状态码:禁止

404状态码:未找到

500状态码:服务器内部错误

502状态码:错误网关

503状态码:服务不可用

扩展

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/zhengyshan/article/details/80850336