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。

  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/315z/p/12107872.html
Copyright © 2011-2022 走看看