zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    每日学习
    每日学习——iframe标签伪造ajax
    每日总结
    LA 3667 Ruler
    hdu 2066 一个人的旅行 (dij+heap)
    LA 3507 Keep the Customer Satisfied (Greedy)
    hdu 2527 Safe Or Unsafe
    LA 4636 Cubist Artwork
    hdu 4514 湫湫系列故事——设计风景线(树DP)
    LA 4328 Priest John's Busiest Day (Greedy)
  • 原文地址:https://www.cnblogs.com/315z/p/12107872.html
Copyright © 2011-2022 走看看