码迷,mamicode.com
首页 > Web开发 > 详细

二. Apache配置

时间:2019-12-27 16:37:57      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:env   错误日志   drive   tor   conf   das   规则   main   day   

2.1默认虚拟主机

  2.1.1介绍

    是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。

  2.1.2配置

    #vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

        //编辑虚拟主机配置文件

    <VirtualHost *:80>

      ServerAdmin admin@wang.com

      DocumentRoot "/data/wwwroot/test0920.com"

      ServerName test0920.com

       ServerAlias www.testdomain.com    

      ErrorLog "logs/aming.com-error_log"

      CustomLog "logs/aming.com-access_log" common

    </VirtualHost>

 

    <VirtualHost *:80>

        DocumentRoot "/data/wwwroot/testdomain.com"

        ServerName www.testdomain.com

    </VirtualHost>

        //ServerAdmin指定管理员邮箱,

         //DocumentRoot为该虚拟主机站点的根目录,

        //ServaerName为网站的域名

          //ServerAlias为网站的第二域名

          //ErrorLog为站点的错误日志

          //CustomLog为站点的访问日志

    #mkdir -p /data/wwwroot/test0920.com /data/wwwroot/testdomain.com

    #echo “www.test0920.com” > /data/wwwroot/test0920.com/index.html

          //网站默认的主页就是index.html

    #echo “www.testdomain.com” > /data/wwwroot/testdomain.com/index.html

    #/usr/local/apache2.4/bin/apachectl -t

    #/usr/local/apache2.4/bin/apachectl graceful

  2.1.3配置验证

    #curl -x127.0.0.1:80 www.test0920.com   

     www.test0920.com

      //访问www.test0920.com/index.html www.test0920.com

    #curl -x127.0.0.1:80 www.testdomain.com

    www.testdomain.com

    #curl -x127.0.0.1:80 www.abc.com

    www.test0920.com

  2.1.4验证成功

 

 2.2用户认

  2.2.1介绍

    用户认证用来对某些目录中的网页进行访问控制,

    当用户访问这些页面的时候需要输入用户名密码进行认证

  2.2.2配置

    #vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf

    <VirtualHost *:80>

    DocumentRoot "/data/wwwroot/testdomain.com"

    ServerName www.testdomain.com

    <Directory /data/wwwroot/testdomain.com> 

      // 指定认证的目录

    AllowOverride AuthConfig 

      // 这个相当于打开认证的开关

    AuthName "testdomain.com user auth" 

      //自定义认证的名字,作用不大

    AuthType Basic 

      //认证的类型,一般为Basic

    AuthUserFile /data/.htpasswd 

      //指定密码文件所在位置

    require valid-user 

      // 指定需要认证的用户为全部可用用户

    </Directory>

    </VirtualHost>

    #/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd test

      //htpasswd为创建用户的工具,-c为creat

      //-m为指定密码加密的方式为MD5

      //data/.htpasswd为密码文件,

      //test为创建的用户。第一次执行需加-c

      //第二次不用加,否则密码文件会重置

    #/usr/local/apache2.4/bin/apachectl -t

    Syntax OK    //验证配置文件是否有问题

    #/usr/local/apache2.4/bin/apachectl graceful

  2.2.3配置验证

    配置完可在windows上访问www.testdomain.com

    文件在C:\Windows\System32\drivers\etc\hosts

    打开在最后一行输入

    #你的IP  www.testdomain.com

    然后去浏览器访问会有弹窗 

  2.3域名跳转

    2.3.1介绍

    当我们变更网站域名,或者申多个域名指向一个网站的时候,这个时候我们就会

    用到域名跳转

    2.3.2配置

    把123.com域名跳转www.123.com

    配置如下:

    <VirtualHost * :80>

    DocumentRoot "/data/wwwroot/testdomain.com"

    ServerName www.testdomain.com

    ServerAlias testdomain.com

    <IfModule mod_rewrite.c> //- 需要mod_ _rewrite模块 支持

    RewriteEngine on

       // 打开rewrite功能

    RewriteCond %{HTTP_ HOST} !^www.testdomain.com$

      //定义rewrite的条件,当主机名不是www.testdomain.com时满足条件

    RewriteRule ^/(. *)$ http://www.testdomain.com/$1 [R=301,L]

      //定义rewrite规则,RewriteRule后面分为三个部分,第一部分为当前网址

      //第二部分为要跳转的网址,第三部分是选项,需要括号括起来。

    </IfModule>

    </VirtualHost>

    要实现跳转,需要rewrite模块的支持,所以查看是否安装该模块

    如果没有则还需要一些配置:

    #/usr/lkocal/apache2.4/bin/apachectl -M |grep -i rewrite

         //如果没有输出则需要继续编辑

    #vim /usr/local/apache2.4/conf/httpd.conf

         //搜索rewrite,把前面#去掉

    #/usr/local/apache2.4/bin/apachectl graceful

  2.3.3配置验证

    #/usr/local/apache2.4/bin/apachectl -M |grep -i rewrite

     Rewrite_module(share)   

         //有这行输出,说明正常加载rewrite模块

    #curl -x127.0.0.1:80 -I testdomain.com

       //可以看见状态码301,跳转的网址是www.testdomain.com

2.4访问日志

  2.4.1介绍

    访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问

  2.4.2配置

    # vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf

       //把123.com虚拟主机改写如下

    <VirtualHost *: 80>

    DocumentRoot " /data/wwwroot/testdomain.com"

    ServerName www.testdomain.com

    ServerAlias testdomain.com

    <IfModule mod rewrite.c>

    RewriteEngine on

    RewriteCond %{HTTP_ HOST} !^www. domain. com$

    RewriteRule ^/(.*)$ http://www.testdomain.com/$1 [R=301,L]

    </IfModule>

    Customlog "1ogs/testdomain. com-access_ log" combined

    </VirtualHost>

    保存配置文件 后,测试语法并重新加载配置:

    #/usr/local/apache2.4/bin/apachectl -t

    Syntax OK

    #/usr/local/apache2.4/bin/apachectl graceful

    2.4.3配置验证

    #curl -x127.0.0.1:80 -I testdomain.com

    #tail /usr/local/apache2.4/logs/testdomain-access_log

    127.0.0.1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  2.5访问日记不记录静态文件

    2.5.1配置

    # vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf

    <VirtualHost *:80>

      DocumentRoot "/data/wwwroot/www.123.com"

       ServerName www.testdomain.com

       ServerAlias testdomain.com

    <IfModule mod rewrite.c>

          RewriteEngine on

          RewriteCond %{HTTP_HOST} !^www.testdomain.com$

          RewriteRule ^/(.*)$ http://www.testdomain.com/$1 [R=301,L]

    </IfModule>

      SetEnvIf Request_URI ".*\.gif$" image-request

      SetEnvIf Request_URI ".*\.jpg$" image-request

      SetEnvIf Request_URI ".*\.png$" image-request

       SetEnvIf Request_URI ".*\.bmp$" image-request

      SetEnvIf Request_URI ".*\.swf$" image-request

      SetEnvIf Request_URI ".*\.js$" image- request

       SetEnvIf Request_URI ".*\.css$" image- request

      Customlog "logs/testdomain1.com-access_log" combined

    </VirtualHost>

      //先定义了一个image-request环境变量,把gif,jpg,png, bmp,swf,js,css等格式文件全归类到此

       保存配置后,测试配置文件是否正确,没有错误重新加载服务

    #/usr/local/apache2.4/bin/apachectl -t

    Syntax OK

    #/usr/local/apache2.4/bin/apachectl graceful

    2.5.2配置验证

    #curl -x127.0.0.1:80 -I testdomain.com

    #ls /usr/local/apache2.4/logs/

    123.com-access_2~~~~~~~~~~~~~~~~~~~~~~~~

  2.6访问日记切割

    2.6.1配置

    # vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf

    <VirtualHost *:80>

        DocumentRoot "/data/wwwroot/testdomain.com"

        ServerName www.testdomain.com

        ServerAlias testdomain.com

    <IfModule mod rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_HOST} !^www.testdomain.com$

        RewriteRule ^/(.*)$ http://www.testdomain.com/$1 [R=301,L]

    </IfModule>

      SetEnvIf Request_URI ".*\.gif$" image-request

      SetEnvIf Request_URI ".*\.jpg$" image-request

      SetEnvIf Request_URI ".*\.png$" image-request

      SetEnvIf Request_URI ".*\.bmp$" image-request

       SetEnvIf Request_URI ".*\.swf$" image-request

      SetEnvIf Request_URI ".*\.js$" image-request

      SetEnvIf Request_URI ".*\.css$" image-request

      CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined env=!image-request

    </VirtualHost>

    保存配置后,测试配置文件是否正确,没有错误重新加载服务

    #/usr/local/apache2.4/bin/apachectl -t

    Syntax OK

    #/usr/local/apache2.4/bin/apachectl graceful

  2.6.2配置验证

    #touch /data/wwwroot/testdomain.com/aming.jpg

    #touch /data/wwwroot/testdomain.com/aming.txt

    #curl -x127.0.0.1:80 www.testdomain.com/aming.jpg

    #curl -x127.0.0.1:80 www.testdomain.com/aming.txt

    #cat /usr/local/apache2.4/logs/123.com-accesss_20~

    127.0.0.1——~~~~

    可以看到123.com-access~~日志中只有aming.txt的请求日志,但没有aming.jpg的

 2.7静态元素过期时间

  2.7.1介绍

    那到底能缓存多久呢?如果服务器上的某个图片更改了,那么应该访问新的图片才对。这就涉及一个静态文件缓存时长的问题,也叫作“缓存过期时间”。在httpd的配置文件中,我们是可以控制这

  2.7.2配置

    在httpd上我们可以控制文件过期时间,配置如下:

    #vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf

    <VirtualHost *:80>

          DocumentRoot "/data/wwwroot/testdomain.com"

         ServerName www.testdomain.com

          ServerAlias testdomain.com

    <VirtualHost *:80>

          DocumentRoot "/data/wwwroot/testdomain.com"

          ServerName www.testdomain.com

            ServerAlias testdomain.com

    <IfModule mod rewrite.c>

           RewriteEngine on

          RewriteCond %{HTTP_HOST} !^www.testdomain.com$

          RewriteRule ^/(.*)$ http://www.testdomain.com/$1 [R=301,L]

    </IfModule>

          SetEnvIf Request_URI ".*\.gif$" image-request

          SetEnvIf Request_URI ".*\.jpg$" image-request

          SetEnvIf Request_URI ".*\.png$" image-request

          SetEnvIf Request_URI ".*\.bmp$" image-request

          SetEnvIf Request_URI ".*\.swf$" image-request

          SetEnvIf Request_URI ".*\.js$" image- request

         SetEnvIf Request_URI ".*\.css$" image- request

          CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined env=!image-request

    <IfModule mod_ expires.c>

          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"

          ExpiresDefault "now plus 0 min"

     </IfModule>

    </VirtualHost>

         //这里gif,jpeg, png格式的文件过期时长为1天,css. js. flash格式的文件过期时长为2小时

    保存配置后,测试配置文件是否正确,没有错误重新加载服务

    #/usr/local/apache2.4/bin/apachectl -t

    Syntax OK

    #/usr/local/apache2.4/bin/apachectl graceful

  2.7.3配置验证

    检查httpd是否加载expires模块:

    #/usr/local/apache2.4/bin/apachectl -M |grep -i expires

         //没有输出则说明当前httpd并不支持expires模块,所以需要修改配置文件

    #vim /usr/local/apache2.4/conf/httpd.conf

         //搜索关键词expires,找到这一行

    #LoadModule expires_ module modules/mod_ expires .so

         //把前面#删掉

    #/usr/local/apache2.4/bin/apachectl graceful

         //重新加载服务

    #/usr/local/apache2.4/bin/apachectl -M|grep -i expires

    expires_module(share)

         //有这行输出说明正确加载expires模块

    下面进行测试:

    #curl -x127.0.0.1:80 -I www.testdomain.com/aming.txt

    #curl -x127.0.0.1:80 -I www.testdomain.com/aming.jpg

    //max-age=86400说明将缓存86400秒,max-age=0说明没有该类型缓存文件

  2.8配置防盗链

    2.8.1介绍

    防盗链,通俗讲,就是不让别人盗用你网站上的资源。这个资源,通常指的是图片、视频、歌曲、文档等。

    2.8.2配置

    配置防盗链先编辑主机配置文件:

    #vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf

    <VirtualHost *:80>

        DocumentRoot "/data/wwwroot/testdomain.com"

        ServerName www.testdomain.com

        ServerAlias testdomain.com

        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og86400"combined env=!image-request

    <Directory /data/wwwroot/testdomain.com>

        SetEnvIfNoCase Referer "http://www.testdomain.com" local_ref

        SetEnvIfNoCase Referer "http://testdomain.com" local_ref

        SetEnvIfNoCase Referer "^$" local ref

    <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">

            Order Allow,Deny

            Allow from env=local_ref

        </filesmatch>

    </Directory>

   </VirtualHost>

         //首先定义允许访问链接的referer,其中^$为空referer,

      //当直接在浏览器里输入图片地址去访问它时,它的referer就为空。

    #/usr/local/apache2.4/bin/apachectl -t

    Syntax OK

    #/usr/local/apache2.4/bin/apachectl graceful

 

  2.8.3配置验证

    #curl -x127.0.0.1:80 -I -e “http://www.testdomain.com/testdomain.txt” http://testdomain.com/aming.jpg

    状态码200

    #curl -x127.0.0.1:80 -I -e “http://www.1234.com/1.txt” http://testdomain.com/aming.jpg

    状态码403

    #curl -x127.0.0.1:80 -I -e “http://www.testdomain.com/123.txt” http://www.123.com/index.html

    状态码200

  2.9访问控制IP

    2.9.1介绍

    这样做的目的是防止别有用心的人拿到后台权限,并获得内部数据。

    2.9.2配置

    先来看看怎么限制IP访问,编辑配置文件

    #vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf

    <VirtualHost *:80>

        DocumentRoot "/data/wwwroot/testdomain.com"

        ServerName www.testdomain.com

        ServerAlias testdomain.com

        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined

      <Directory /data/wwwroot/testdomain.com/admin/>

            Order deny,allow

            Deny from all

            Allow from 127.0.0.1

     </Directory>

   </VirtualHost>

      //Directory是用来指定限制访问的目录,order定义控制顺序

    验证过程:

    #mkdir /data/wwwroot/testdomain.com/admin

      //创建admin目录,模拟网站后台

    # echo  “admin"  >  /data/wwwroot/testdomain.com/admin/index.html

    # >  /usr/local/apache2. 4/1ogs/123.com-access_20170319.1og /

  2.9.3配置验证

    # curl  -x192.168. 188.128:80  -I  testdomain.com/admin/index.html

    状态码403

    # curl  -x127.0.0.1:80 -I  testdomain.com/admin/index.html

    状态码200

    # cat /usr/local/apache2.4/logs/123.com-access_ 20~~~

    192.168.~~~

    127.0.0.1~~~

  2.10访问控制Diretory\FileMatch

    2.10.1简述

    访问控制也可以针对文件进行操作

    2.10.2配置

    编辑配置文件

    #vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf

    <VirtualHost *:80>

        DocumentRoot "/data/wwwroot/testdomain.com"

        ServerName www.testdomain.com  

        ServerAlias testdomain.com

        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined

        <Directory /data/wwwroot/testdomain.com/admin/>

          <Filesmatch "admin.php(.*)">

            Order deny,allow

            Deny from all

            Allow from 127.0.0.1

          </Filesmatch>

        </Directory>

    </VirtualHost>

    验证过程如下:

    # /usr/local/apache2. 4/bin/apachectl -t

    Syntax OK

    # /usr/local/apache2 .4/bin/ apachectl graceful

    # touch /data/wwwroot/testdomain.com/admin/admin.php

  2.10.3配置验证

    # curl -x127.0.0.1:80 www. 123. com/upload/1.php

    状态码 200

    #curl -x192.168.247.139:80 www.testdomain.com/admin/admin.php -I

    状态码 403

  2.11限制某个目录禁止解析PHP

    2.11.1简述

    把能上传文件的目录直接禁止PHP解析

    2.11.2配置

    配置如下:

    #vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf

    <VirtualHost *:80>

        DocumentRoot "/data/wwwroot/testdomain.com"

        ServerName www.testdomain.com

        ServerAlias testdomain.com

        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined

        <Directory /data/wwwroot/testdomain.com/upload>

            php_admin_flag engine off

        </Directory>

    </VirtualHost>

    # /usr/local/apache2 .4/bin/apachectl -t

    Syntax OK

    # /usr/local/apache2 .4/bin/apachectl graceful

    # cp /usr/local/apache2 .4/htdocs/1. php /at/wwwroot/testdomain.com/upload/

    2.11.3配置验证

    # curl -x127.0.0.1:80 testdomain.com/upload/1.php

    <?php .

    echo "php解析正常";

    ?> 

  2.12限制user_agent

    2.12.1介绍

    user_agent是指用户浏览器端的信息,比如你是用IE的,还是firefox的.有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开pc常规页面.

    2.12.2配置

    #vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

    <VirtualHost *:80>

        DocumentRoot "/data/wwwroot/testdomain.com"

        ServerName www.testdomain.com

        ServerAlias testdomain.com

        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined

        <IfModule mod_ rewrite.c>

            RewriteEngine on

            RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]

            RewriteCond %{HTTP_USER_AGENT} .*baidu.com.*[NC]

            RewriteRule  .*  -  [F]

        </IfModule>

    </VirtualHost>

         //%{HTTP_USER_AGENT}为user_agent的内置变量,NC代表”不区分大小写”,F代表Forbidden,OR表示”或者”

    验证过程:

    # /usr/local/apache2.4/bin/apachectl -t

    Syntax OK

    # /usr/local/apache2.4/bin/apachectl graceful

    2.12.3配置验证

    #curl -I -x127.0.0.1:80 testdomain.com/upload/1.php

    状态码403

    #curl -A “123123” -I -x127.0.0.1:80 testdomain.com/upload/1.php

    状态码200

二. Apache配置

标签:env   错误日志   drive   tor   conf   das   规则   main   day   

原文地址:https://www.cnblogs.com/wft9/p/12108042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!