Apache配置
二. Apache配置
2.1默认虚拟主机
2.1.1介绍
Httpd支持多个虚拟主机
默认虚拟主机是负责处理没有标记的域名的主机
2.1.2配置
编辑配置文件httpd.conf
vim /usr/local/apache2.4/conf/httpd.conf
搜索关键词httpd-vhost. 找到这行删掉行首的井号,然后保存
编辑虚拟主机配置文件:
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 修改如下:
(该文件最后面的两段(以<VirtualHost>开头,以</VirtualHost>结尾), 这样一段就是一个虚拟主机,而默认虚拟主机就是第一个配置段)
ServerAdmin指定管理员邮箱;DocumentRoot为该虚拟主机站点的根目录;ServerName为网站域名(只能一个);ServerAlias为网站第二域名(可以多个,用空格分隔);ErrorLog为站点的错误日志;CustomLog为站点的访问日志。
2.1.3配置验证
在虚拟主机配置文件中,我们定义了两个站点aming.com和123.com, 假如有第三个域名abc.com指向本机,在访问abc .com时,会去访问默认虚拟主机aming .com,示例如下:
2.1.4遇到的问题
原因:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf文件配置出错,查错改正
2.2用户认证
2.2.1介绍
使用户访问网站的时候,需要输入用户名密码才能访问,目的是保证安全。
2.2.2配置
对123.com站点做一个全站的用户认证
编辑123.com虚拟主机:
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
修改<VirtualHost *:80>
DocumentRoot “ /data/wwwroot/www.123.com"
ServerName www.123.com
<Directory /data/wwwroot/www.123.com> //指定认证的目录
AllowOverride AuthConfig //打开认证的开关
AuthName "123.com user auth" //自定义认证的名字
AuthType Basic //认证的类型,一般为Basic
AuthUserFile /data/ .htpasswd // 指定密码文件所在位置
require valid-user //指定需要认证的为全部可用用户
</Directory>
</VirtualHost>
创建密码文件:
/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming
输入两遍想要的密码
验证有无错误:
/usr/local/apache2.4/bin/apachectl -t
重新加载:
/usr/local/ apache2.4/bin/apachectl graceful
配置完成后,到你的真实电脑Windows去修改hosts文件,把www.123.com域名 指向你的这台Linux机器,这样才能通过浏览器访问到www.123.com。
操作过程:
Windows上的hosts文件所在路径C:\Windows\System32\drivers\etc\host,,
用记事本编辑它在最下面添加:
# 192.168.68.131 www. 123.com //左边的IP地址为Linux IP,可能不一样,注意更改。
2.2.3配置验证
保存hosts文件,用Windows的浏览器去访问www.123.com了。会弹出一个用于认证的提示框,如图所示:
2.2.4遇到的问题
解决办法:关闭Linux防火墙
systemctl stop firewalld
2.3域名跳转
2.3.1介绍
一个网站可能会有多个域名,域名跳转就是设置从一个域名跳转到另一个域名
2.3.2配置
把123.com域名跳转到www.123.com,配置如下:
解释:RewriteRule后面由空格划分成三部分,第一部分为当前的URL(也就是网址),不过这个URL是不把主机头(域名)算在内的。第二部分为要跳转的目标地址,这个地址默认就是前面定义的ServerName。第三部分为一些选项,需要用方括号括起来,301为状态码,它称作“永久重定向”(还有一种跳转用的状态码为302,叫作“临时重定向"),l表示"Iast", 意思是跳转一次就结束了。要实现域名跳转,需要有rewrite模块支持
查看httpd是否已经加载该模块:
/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite
//如果没有任何输出,则需要编辑配置文件
vim /usr/local/apache2.4/conf/httpd.conf
2.3.3配置验证
curl -x127.0.0.1:80 -I 123.com
可以看到状态码为301,跳转后的网址( Location那行)为http://www.123.com/
2.4访问日志
2.4.1介绍
访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问题,比如当有攻击时,是可以通过查看日志看到一些规律的。
2.4.2配置
要配置httpd访问日志,首先要在主配置文件中定义访问日志的格式,打开主配置文件:
vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat
建议使用第一个日志,因为记录的信息更全
%h为访问网站的IP;
%l为远程登录名,这个字段基本上为“-";
%u为用户名,当使用用户认证时,这个字段为认证的用户名;
%t为时间;
%r为请求的动作(比如用curl -I时就为HEADE );
%s为请求的状态码,写成%>s为最后的状态码;
%b为传输数据大小;
编辑虚拟主机配置文件: 把123.com虚拟主机改写如下
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
/usr/local/apache2.4/bin/apachectl graceful
curl -x127.0.0.1:80 -I 123.com //再次curl
tail /usr/local/apache2.4/logs/123.com-access_log
发现生成了日志,并且有相关的日志记录。另外,用Firefox浏览器访问一下,再次查看日志,多了一行
2.5访问日记不记录静态文件
2.5.1介绍
一个网站会有很多元素,尤其是图片、js. css等静态的文件非常多,用户每请求一个页面就会访问诸多的图片、js等静态元素,这些元素的请求都会被记录在日志中。如果一个站点访问量很大, 那么访问日志文件增长会非常快,一天就可以达到几GB。这不仅对于服务器的磁盘空间造成影响,更重要的是会影响磁盘的读写速度。访问日志很重要,我们又不能不记录。这些静态元素请求记录到日志里意义并不大,所以可以限制这些静态元素去记录日志,并且需要把日志按天归档,一天一个日志,这样也可以防止单个日志文件过大
2.5.2配置
修改123.com虚 拟主机vim /usr/local/apache2.4/ conf/extra/httpd-vhosts.conf
先定义了一个image-request环境变量,把gif、jpg、png、bmp. swf、js、css等格式的文件全部归类到image- request里,后面的env= ! image-request有用到一个“!”,这相当于取反了,意思是把image-request以外的类型文件记录到日志里。正常应该CustomLog后面为日志文件名,但在这里用了一个管道,它会把日志内容交给后面的rotatelogs命令处理。这个rotetelogs为httpd自带切割日志的工具,它会把访问日志按我们定义的文件名格式进行切割,其中86400单位是“秒”,相当于“一天"
测试配置文件是否有错误,没有错误重新加载服务
再次访问,才会生成新的日志
curl -x127.0.0.1:80 -I 123.com
配置在日志不记录静态元素:
2.6静态元素过期时间
2.6.1介绍
一个静态文件缓存时长,也叫作“缓存过期时间"。在httpd的配置文件中,我们可以控制这个时间。
2.6.2配置
进入/usr/localapache2.4/conf/extra/httpd-vhosts.conf编辑虚拟主机
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
这部分配置用到了mod_expires模块,相关配置内容通过字面也可以大致猜到其含义。这里gif. jpeg. png格式的文件过期时长为1天,css、 js、flash格式的文件过期时长为2小时,其他文件过期时长为0,也就是不缓存
再次验证重启
检查Thttpd是否加载expires模块:
/usr/local/apache2.4/bin/apachectl -M|grep -i expires
//没有任何输出,说明当前httpd不支持expires模块,所以需要修改配置文件打开该模块
vim /usr/local/apache2.4/conf/httpd.conf
2.6.3配置验证
curl -x127.0.0.1:80 -I www.123.com/aming.jpg
可以看到max-age=86400,这说明jpg的图片将缓存86400秒,也就是一天
其中max-age=0,说明没有缓存该类型的文件。
2.7 配置防盗链
2.7.1介绍
防盗链,就是不让别人盗用你网站上的资源。资源,通常指的是图片、视频、歌曲、文档等。
一个referer其实就是一个网址。
2.7.2配置
编辑虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
首先定义允许访问链接的referer,其中^$为空referer,当直接在浏览器里输人图片地址去访问它时,它的referer就为空。然后又使用filesmatch来定义需要保护的文件类型,访问txt、Doc、mp3、zip、rar、jpg、gif格式的文件,当访问这样类型的文件时就会被限制。
2.7.3配置验证:
再次验证重启并用curl测试
使用非允许的referer会返回403的状态码
//访问HTML类型的文件时,也不会被保护
2.8 访问控制Diretory
2.8.1介绍
对于一些比较重要的网站内容,除了可以使用用户认证限制访问之外,还可以通过其他一些方法做到限制,如可以限制IP,也可以限制user_ agent,限制IP指的是限制访问网站的来源IP,而限制user_ agent,用来限制恶意或者不正常的请求
2.8.2配置
进入/usr/localapache2.4/conf/extra/httpd-vhosts.conf编辑配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
使用<Directory>来指定要限制访问的目录,order定义控制顺序,哪个在前面就先匹配哪个规则。下图中deny在前面,所以先匹配Deny fromall这样所有的来源IP都会被限制,然后匹配Allow from127.0.0.1,这样又允许了127.0.0.1这个IP。最终的效果是,只允许来源IP为127.0.0.1的访问
2.8.3配置验证:
创建admin目录,模拟网站后台,在后台目录下面创建文件,并写入内容
本机有两个IP,一个是192.168.68.131,一个是127.0.0.1, 通过这两个IP都可以访问到站点。而来源IP分别为192.168.68.131和127.0.0.1,其实和本机IP是一样的。也可以使用Windows的浏览器访问,如图所示。
浏览器访问提示Forbidden,其实就是403
2.9 访问控制Diretory\FileMatch
2.9.1介绍
单独针对某个文件来做限制:
2.9.2配置
进入/usr/localapache2.4/conf/extra/httpd-vhosts.conf编辑配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
2.10限制某个目录禁止解析PHP
2.10.1介绍
对于使用PHP语言编写的网站,有一些目录是有需求上传文件的,如果网站代码有漏洞,让黑客上传了一个用PHP代码写的木马,由于网站可以执行PHP程序,最终会让黑客拿到服务器权限。为了避免这种情况发生,把能上传文件的目录直接禁止解析PHP代码
2.10.2配置
进入/usr/local/apache2.4/conf/extra/httpd-vhosts.conf编辑配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
2.10.3配置验证:
2.11 限制user_agent
2.11.1介绍
User_ agent 为浏览器标识;针对user_agent来限制一些访问,限制一些不太友好的搜索引擎“爬虫”,也可以限制恶意请求,这种恶意请求我们通常称作cc攻击,就是用很多用户的电脑同时访问同一个站点,当访问量或者频率达到一定层次,会耗尽服务器资源,从而使之不能正常提供服务。我们就可以通过限制user_agent发挥防攻击的作用。
2.11.2配置
进入/usr/localapache2.4/conf/extra/httpd-vhosts.conf编辑配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
这个需求也用到了rewrite模块,%{HTTP. _USER. AGENT} 为user_agent的内置变量,在本例中当user_agent匹配curl或者baidu.com时,都会触发下面的规则。方括号中的OR表示“或者"NC表示“不区分大小写”,F相当于Forbidden。
2.11.3配置验证:
curl的-A选项指定user_ agent。
第一个请求,user_agent为“curl/7.29.0" 匹配了第一个条件,所以会403;
第二个请求,user_agent为自定义的“123123"没有匹配任何条件,所以状态码为200。