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:WindowsSystem32driversetchost,,

用记事本编辑它在最下面添加:

# 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 访问控制DiretoryFileMatch

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。

原文地址:https://www.cnblogs.com/315z/p/12107872.html