2018-9-12 直播课堂笔记

由于临时更改了时间,由周二的课程改到了周三。感觉一下子时间又紧了起来。还是一个小时的串讲知识!

目录

         1.Apache默认虚拟主机

2.Apache用户认证

3.域名跳转

4.Apache访问日志

5.访问日志不记录静态文件

6.访问日志切割

7.静态元素过期时间


1.Apache默认虚拟主机

1.1 Apache虚拟主机的实现方式有3种。

  • 基于IP的虚拟主机
  • 基于端口的虚拟主机
  • 基于域名的虚拟主机

1.2 我们首先要打开这个模块(Include conf/extra/httpd-vhosts.conf)去掉前面的#号

LoadModule access_compat_module modules/mod_access_compat.so #基于主机的组授权(名称或IP地址) httpd 2.x兼容的模块,
LoadModule proxy_module modules/mod_proxy.so #apache的代理模块
LoadModule proxy_http_module modules/mod_proxy_http.so #代理http和https请求
LoadModule vhost_alias_module modules/mod_vhost_alias.so #虚拟主机动态配置
LoadModule authz_host_module modules/mod_authz_host.so #基于主机的组授权
Include conf/extra/httpd-vhosts.conf#启用虚拟主机配置

以上模块前面的#去除,其余几个还没有讲到不过可以了解一下。

1.3 什么是默认虚拟主机

默认虚拟主机是在定义虚拟主机时的第一个虚拟主机。一般情况下,别人的主机名可以解析到本地的IP后对访问到默认的虚拟主机,为了避免出现恶意的解析,通常将默认虚拟主机禁用。

1.4 核心配置其中红色字体

  • <VirtualHost 192.168.8.60:80>
  • #    ServerAdmin webmaster@dummy-host.example.com
  •     DocumentRoot /www/www.t.com
  •     ServerName www.t.com
  • #    ErrorLog logs/dummy-host.example.com-error_log
  • #    CustomLog logs/dummy-host.example.com-access_log common
  • </VirtualHost>

DocumentRoot:应该是定义这个服务器对外发布的超文本文档存放的路径,也就是说,客户程序请求的URL就被映射为这个目录下的网页文件,这个目录下的子目录,以及符号连接指出的文件和目录都能被浏览器访问。

ServerName指令来标明服务于哪一个主机只能有一个值

2.Apache用户认证

2.1 有时候,我们会有这样一个需求,就是需要让一些文件经过用户账号密码认证后才能进行访问,并且限定某些站点只有固定的用户才能登陆,一些内部测试的网页或者只有我们管理人员或者测试人员可以看到的一些网页!

2.2核心配置

//有时我们可能不需要这么复杂的配置,只要配置允许访问就可以
一 编辑/etc/httpd/conf/httpd.conf

“AllowOverride  none” 这个是系统默认的

我们这里将none改为AuthConfig参数,并添加以下几行内容,如下:

AllowOverride AuthConfig 
AuthType Basic # 用户认证类型 
AuthName "Restricted Site" # 认证时显示的名字 
AuthUserFile /etc/httpd/conf/htpasswd # 认证时用户的账号密码文件 
AuthGroupFile /etc/httpd/conf/htgroup #基于组的认证 
# Require user tom # 只有tom用户才能登录 
# Require group myusers # 允许哪个组中的用户登录 
Require valid-user # 出现在账号密码文件中的用户都能登录

二、创建/etc/httpd/conf/htpasswd文件,及用户

使用htpasswd命令创建用户,在第一次创建时加-c可创建文件

# htpasswd -c -m /etc/httpd/conf/htpasswd  tom

# htpasswd -m /etc/httpd/conf/htpasswd  jerry

3.域名跳转

3.1Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基 于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明 RewriteEngine on。

3.2 核心配置

需求:功能是把client请求的主机前缀不是www.domain.cn和202.91.246.20都跳 转到主机前缀为http://www.domain.cn, 避免相同内容的网页有多个指向的域名,如http://domain.cn。

     
     RewriteEngine on #打开rewirte功能
     RewriteCond %{HTTP_HOST} !^www.domain.cn [NC] #声明Client请求的主机中前缀不是www.domain.cn, 其中 [NC] 的意思是忽略大小写
     RewriteCond %{HTTP_HOST} !^202.91.246.20 [NC] #声明Client请求的主机中前缀不是202.91.246.20,其中 [NC] 的意思是忽略大小写
     RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空
     RewriteRule ^(.*) http://www.kiya.cn/ [L] #含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://www.kiya.cn/,[L]意味着立即停止重写操作,并 不再应用其他重写规则。这里的.*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的 (.*)字符。

3.3 Apache mod_rewrite规则重写的参数说明

Apache mod_rewrite规则重写的参数说明:
     1) R[=code](force redirect) 强制外部重定向
     强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。
     2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。
     3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。
     4) P(force proxy) 强制使用代理转发。
     5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。
     6) N(next round) 重新从第一条规则开始运行重写过程。
     7) C(chained with next rule) 与下一条规则关联
     如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。
     8) T=MIME-type(force MIME type) 强制MIME类型
     9) NS (used only if no internal sub-request) 只用于不是内部子请求
     10) NC(no case) 不区分大小写
     11) QSA(query string append) 追加请求字符串
     12) NE(no URI escaping of output) 不在输出转义特殊字符
     例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo
     13) PT(pass through to next handler) 传递给下一个处理
     例如:
     RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理
     Alias /def /ghi
     14) S=num(skip next rule(s)) 跳过num条规则
     15) E=VAR:VAL(set environment variable) 设置环境变量

4.Apache访问日志

4.1 web服务器日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对日志进行统计、分析和综合,就能有效地掌握服务器的运行状况、发现和排除错误原因、了解客户访问分布等,更好地加强系统的维护和管理。Web服务模式主要有三个步骤:服务请求,包含用户端的众多基本信息,如IP地址、浏览器类型、目标URL等。 服务响应,Web服务器接收到请求后,按照用户要求运行相应的功能,并将信息返回给用户。如果出现错误,将返回错误代码。 追加日志,服务器将对用户访问过程中的相关信息以追加的方式保存到日志文件中。

4.2 日志类型

错误日志:  错误日志记录了服务器运行期间遇到的各种错误,以及一些普通的诊断信息,比如服务器何时启动、何时关闭等。

                     包含获知失效链接  获知 CGI 错误  获知用户认证错误

访问日志:包含访问服务器的远程机器的地址:可以得知浏览者来自何方

             浏览者访问的资源:可以得知网站中的哪些部分最受欢迎

                  浏览者的浏览时间:可以从浏览时间(如工作时间或休闲时间)对网站内容进行调整

                  浏览者使用的浏览器:可以根据大多数浏览者使用的浏览器对站点进行优化

4.3 定义日志格式

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined  
 LogFormat "%h %l %u %t \"%r\" %>s %b" common  

格式说明符

%v

进行服务的服务器的标准名字 ServerName,通常用于虚拟主机的日志记录中。

%h

客户机的 IP 地址。

%l

从identd服务器中获取远程登录名称,基本已废弃。

%u

来自于认证的远程用户。

%t

连接的日期和时间。

%r

HTTP请求的首行信息,典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。经常可能出现的 METHOD 是 GET、POST 和 HEAD;RESOURCE 是指浏览者向服务器请求的文档或 URL;PROTOCOL 通常是HTTP,后面再加上版本号,通常是 HTTP/1.1。

%>s

响应请求的状态代码,一般这项的值是 200,表示服务器已经成功地响应浏览器的请求,一切正常;以 3 开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置;以 4 开头的状态代码表示客户端存在某种错误;以 5 开头的状态代码表示服务器遇到了某个错误。

%b

传送的字节数(不包含HTTP头信息),将日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。

%{Referer}i

指明了该请求是从被哪个网页提交过来的。

%U

请求的URL路径,不包含查询串。

\"%{User-Agent}i\"

此项是客户浏览器提供的浏览器识别信息。

5.访问日志不记录静态文件

5.1 当有用户访问我们的站点,站内会有很多的静态文件,如图片、css、js等,但是每当我们查看某个IP都是访问了咱们站内的什么内容时候,往往会因为这些多出来的元素导致不可以很直观的看出来访问的页面,所以咱们可以让这些元素可以不用记录在访问日志中。 

5.2 核心配置

DocumentRoot "/data/wwwroot/test.com"
ServerName www.test.com
ErrorLog "logs/test.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/test.com-access_log" combined env=!img

把如上以gif,jpg,png,bmp,swf,js,.css结尾的全部标记为img


CustomLog "logs/test.com-access_log" combined env=!img
除了咱们自定义的img文件,全部都记录在如上此文件中! 

6.访问日志切割

6.1 我们每访问一次网站,那么就会记录若干条日志。当然前提是已经配置了日志,日志如果不去管理,时间长了磁盘空间就会占用越来越大,定时的清理非常 有必要。

6.2核心配置

ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/aaa-error_%Y%m%d.log 86400"  

CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/aaa-error_%Y%m%d.log 86400" combined

rotatelogs是Apache自带的切割日志的工具。-l的作用是校准时区为UTC(也可以不用),也就是北京时间。最后面的86400,单位是秒,所以正好是一天,那么日志会每一天切割一次。

6.3 rotatelogs说明:

rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]

rotationtime指的是设定多少秒后进行日志切割;

filesizeM指的是日志多大之后自动切割,可接受的单位为K,M,G。

7.静态元素过期时间

7.1浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了。但是缓存多久呢?如果网站图片更新了呢,那么应该访问新图片才是。所以这就涉及到静态文件缓存时长的问题了,也就是“缓存过期时间”。

7.2首先要先打开expires相关模块

LoadModule expires_module modules/mod_expires.so   //去掉#

7.3 核心配置

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"

#    // 按文件类型来设置自定义过期时间
#    // acess表示从访问时间开始
#    // now表示按当前时间开始
#    // plus在前面的时间基础上加上
#    // 1 hours/days 表示文件的生命周期
#    // 例如 acess plus 1 days 表示该文件从访问的时间开始1天内有效,无需重新获取
    ExpiresDefault "now plus 0 min"    
#   //除上述外的文件指定默认的过期时间

 

扩展知识:apache 日志中记录代理IP以及真实客户端IP。

默认情况下log日志格式为:
LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined
其中%h 是记录访问者的IP,如果在web的前端有一层代理,那么这个%h其实就是代理机器的IP,这不是我们想要的。
在这种情况下,%{X-FORWARDED-FOR}i字段会记录客户端真实的IP。
所以log日志改为:
LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined

 

什么 是referer,什么 是useragent

这个就是referer,什么叫做referer呢,就是你访问这个地址的时候它从哪里来的:"http://www.test.com" referer后面是他的user agent也就是浏览器的表识"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36",那比如行我们的谷歌浏览器 chrome IE浏览器 或者说我们的curl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值