zoukankan      html  css  js  c++  java
  • [转载]apache学习笔记

    *************************************************************
    源码安装apache2.0,DSO(动态加载模块方式),也是通常安装方式:
    $./configure --prefix=/usr/local/apache2s --with-layout=Apache --enable-modules-most --enable-mods-share=all
    $make
    $make install
    *************************************************************
    安装第三方模块:
    /path/to/apache/bin/apxs -cia module.c
    -c(compile)编译
    -i(install)安装
    -a(activate)启动
    对于只有一个.c文件的模块,可以用这个命令安装,如果是有多个源码文件的模块,则需要其本身的安装说明
    *************************************************************
    安装mod_perl
    $cd mod_perl_2.0.2/
    $perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/local/apache2s/bin/apxs EVERYTHING=1 PERL_USELARGEFILES=0
    $make
    $make install
    然后:
    将LoadModule perl_module modules/mod_perl.so这句话加入到httpd.conf文件中,重启apache
    检查:
    $/usr/local/apache2s/bin/apxs -q LIBEXECDIR   显示模块所在目录(例如:/usr/local/apache2/modules)
    *************************************************************
    安装php模块:
    $cd php-4.4.4/
    $./configure --with-apxs=/usr/local/apache2/bin/apxs (apache1.3)
    或$./configure --with-apxs2=/usr/local/apache2/bin/apxs (apache2.X)
    $make
    $make install
    修改配置文件,添加:
    LoadModule php4_module modules/libphp4.so

    AddType application/x-httpd-php .php .php3 .any_file_in_php
    AddHandler application/x-httpd-php .php .php3 .any_file_in_php
    这样这台服务器的php网页就可以正常访问了!
    *************************************************************
    日志格式中状态码内容,详见PaoloDocuments/apache/http协议规范文件RFC2616.txt
    *************************************************************
    指定日志记录格式,组合日志格式(combined)或通用日志格式(common),修改配置文件:
    CustomLog logs/access_log combined    组合日志格式
    CustomLog logs/access_log common      通用日志格式
    *************************************************************
    LogLevel 配置文件中的这个指令指定日志记录等级(但无论指定什么记录等级,日志都会记录notice等级的信息)
    *************************************************************
    通用日志格式与组合日志格式的"%h"控制符表示远程请求用户的身份,依据HostNameLookups指令的设定值,可能是主机名也可能是IP地址。如果想永远记录IP地址,则使用“%a”控制符
    *************************************************************
    记录从客户端收到的cookie
    CustomLog logs/cookies_in.log "%{UNIQUE_ID}e %{Cookie}i"
    CustomLog logs/cookies2_in.log "%{UNIQUE_ID}e %{Cookie2}i"
    记录由服务器设定并传送给客户端的cookie值:
    CustomLog logs/cookies_out.log "%{UNIQUE_ID}e %{Set-Cookie}o"
    CustomLog logs/cookies2_out.log "%{UNIQUE_ID}e %{Set-Cookie2}o"
    *************************************************************
    不记录来自本机网页的图像请求:
    <FilesMatch /.(jpg|gif|png$)>
    SetEnvIfNoCase Referrer "^http://www.example.com/" local_referrer=1
    </FilesMatch>
    Customlog logs/access_log combined env=!local_referrer
    *************************************************************
    按照日或小时来记录请求:
    CustomLog "| /usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/access_log.%Y-%m-%d 86400" combined
    其中:
    rotatelogs的第一个参数是主日志文件名如果有%字符,则表示日志文件名中时间的格式,如果没有指定时间格式,则是以秒为单位,从1970.1.1日算起的秒数
                第二个参数是产生新日志的间隔是多少秒。也可以是大小如果把上例中的86400换成5M,则表时日志达到5M时,就会产生一个新的日志,日志的名字是access_log.%Y-%m-%d格式的
    参阅:man -M /usr/local/apache2/man rotatelogs.8
    *************************************************************
    logresolve 将日志中记录的IP地址解析为主机名
    例如:
    $logresolve -c < /usr/local/apache2/logs/access_log.raw > access_log.resolved
    也可以让apache在处理过程中使用IP地址,然后在记录日志时,以管道方式的日志记录进程来解析,修改配置文件:
    HostnameLookups off
    CustomLog "|/usr/local/apache2/bin/logresolve -c >> /usr/local/apache2/logs/access_log.resolved" combined
    *************************************************************
    只有一个IP,但想在系统上支持多个网站:
    NameVirtualHost *
    <VirtualHost *:80>
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /www/docs/dummy-host.example.com
        ServerName dummy-host.example.com
        ServerAlias www.paolo.com                    ######p这条指令可对虚拟主机设定多个名称
        ErrorLog logs/dummy-host.example.com-error_log
        CustomLog logs/dummy-host.example.com-access_log common
    </VirtualHost>
    其中:"*"表示所设定的主机可在所有的地址上运行。对于只有单一地址的机器,这表示会在该地址上运行,同时也会在loopback地址上运行。
    如果NameVirtualHost 后面放置主机名称可能会在启动服务器时停用虚拟主机的机制。
    虚拟主机会使用户无法再访问配置文件中的主服务器。如果想让主服务器成为默认服务器,则必须在虚拟主机区块中先将它列出。
    对于每个虚拟主机名称,还需要在DNS中添加相关记录。
    *************************************************************
    $/usr/local/apache2/bin/httpd -S    显示虚拟主机的配置
    *************************************************************
    ErrorDocument 404 /err.html    这个指令可以让没有打到指定网页的时候,不显示404错误,而是err.html页面。错误号可以是其它的号码,如403、500等
    例如:
    <VirtualHost *>
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /www/docs/wangqi.paolo.com
        ServerName wangqi.paolo.com
        ErrorLog logs/wangqi.paolo.com-error_log
        CustomLog logs/wangqi.paolo.com-access_log combined
        ErrorDocument 404 /err.html
    </VirtualHost>
    根据以上配置,访问wangqi.paolo.com/index.html时,如果/www/docs/wangqi.paolo.com目录下没有index.html文件时,则会显示/www/docs/wangqi.paolo.com目录下的err.html文件
    *************************************************************
    如果是有多个IP的情况下,想在每个地址上支持一个网站:
    NameVirtualHost 127.0.0.1
    <VirtualHost 10.4.5.230>
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /www/docs/paolo.paolo.com
        ServerName paolo.paolo.com
        ErrorLog logs/paolo.paolo.com-error_log
        CustomLog logs/paolo.paolo.com-access_log combined
    </VirtualHost>
    <VirtualHost 10.4.5.231>
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /www/docs/cissy.paolo.com
        ServerName cissy.paolo.com
        ErrorLog logs/cissy.paolo.com-error_log
        CustomLog logs/cissy.paolo.com-access_log combined
    </VirtualHost>
    以上配置根据所访问的IP地址不同,会访问不同的虚拟主机。如果服务器上还有其它的IP地址,但是没有在配置文件的虚拟主机区块列出来时,这时访问这个其它的IP地址,请求会被送至在配置文件主设定区的虚拟主机
    *************************************************************
    建立以IP寻址的默认虚拟主机,以配置文件中加入下面代码:
    <VirtualHost _default_>
        DocumentRoot /www/htdocs
        ErrorDocument 404 /err.html
    </VirtualHost>
    加入以上代码后,如果访问本地的IP,但是该IP确没有在配置文件中配置时,则会访问以上代码指定的页面
    *************************************************************
    混用以IP寻址及以名称寻址虚拟主机:
    ServerName 127.0.0.1
    NameVirtualHost 10.4.5.135
    NameVirtualHost 10.4.5.230
    <VirtualHost 10.4.5.135>                       ################此处不同
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /www/docs/cissy.paolo.com
        ServerName cissy.paolo.com                 ################此处不同
        ErrorLog logs/cissy.paolo.com-error_log
        CustomLog logs/cissy.paolo.com-access_log combined
    </VirtualHost>
    <VirtualHost 10.4.5.230>                          ################此处不同
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /www/docs/cissy.paolo.com
        ServerName wangqi.paolo.com                          ################此处不同
        ErrorLog logs/wangqi.paolo.com-error_log
        CustomLog logs/wangqi.paolo.com-access_log combined
    </VirtualHost>
    <VirtualHost 10.4.5.230>                          ################此处不同
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /www/docs/cissy.paolo.com
        ServerName paolo.paolo.com                          ################此处不同
        ErrorLog logs/paolo.paolo.com-error_log
        CustomLog logs/paolo.paolo.com-access_log combined
    </VirtualHost>
    *************************************************************
    mod_vhost_alias   模块可以建立大量的虚拟主机
    *************************************************************
    将URL对应至特定目录。也就是说,如果我们访问http://10.4.5.135/paolo,我们如果不想让他访问/usr/local/apache2/htdocs/paolo,而是让它访问其它的目录中的内容,我们可以在配置文件中加入如下:
    Alias /paolo /home/paolo/apache_paolo
    然后还要把指定的目录加入到配置文件中,以让apache可以访问,默认情况下apache是不访问DocumentRoot以外的目录的。
    <Directory "/home/paolo/apache_paolo">
        Order allow,deny
        Allow from all
    </Directory>
    这种用Alias的目录指定,其实是用Alias的第二个参数去替换第一个参数。本例中就是用/home/paolo/apache_paolo去替换/paolo,因此,我们访问http://10.4.5.135/paolo,其实上是访问http://10.4.5.135/home/paolo/apache_paolo
    这种方法对"/"符号要求非常严格,如果上例我们写成Alias /paolo/ /home/paolo/apache_paolo,而我们在访问http://10.4.5.135/paolo/index.html,其实是访问http://10.4.5.135/home/paolo/apache_paoloindex.html,这是错误的,因为/home/paolo/apache_paolo替换的是/paolo/,注意,这里把最后的“/”也替换了,所以转换后就是前面所说那样错误的URL。
    Alias也可以为现有的网页内容创建新的URL,例如要想原来http://10.4.5.135/php/phpinfo.php内容,通过http://10.4.5.135/newphp/phpinfo.php也可以访问,只要在配置文件中加入如下一行:
      Alias /newphp /usr/local/apache2/htdocs/php
    Alias只影响本地URI,不会影响URL的主机名部分
    *************************************************************
    让服务器的用户都有自己的URL,有自己的网页空间,配置文件:
    UserDir public_html     
    配置文件中有这行指令后,再在用户主目录下创建public_html目录,里面放入网页就可以了。访问的URL为,以wangqi这个用户为例:http://10.4.5.135/~wangqi/
    还要将配置文件中一段注释去掉:
    #<Directory /home/*/public_html>
    #    AllowOverride FileInfo AuthConfig Limit Indexes
    #    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    #    <Limit GET POST OPTIONS PROPFIND>
    #        Order allow,deny
    #        Allow from all
    #    </Limit>
    #    <LimitExcept GET POST OPTIONS PROPFIND>
    #        Order deny,allow
    #        Deny from all
    #    </LimitExcept>
    #</Directory>
    以配置访问权限。
    另一种方式:
    UserDir /www/user/*/htdocs
    这种方法后的参数是完整的路径名,把用户的页面文件都放在了统一的目录下(/www/usr/下),后面的*号是用户名命名的目录。访问方法和上面第一种方法一样
    *************************************************************
    AliasMatch ^/testph(p|ps) /usr/local/apache2/htdocs/php
    用AliasMatch指令,可以用正则表达式的方式将多个URL对应至同一个目录,以上指令,可以用:
    http://10.4.5.135/testphp/phpinfo.php
    http://10.4.5.135/testphps/phpinfo.php来访问同一个目录中的内容
    *************************************************************
    重定向至其他URL,修改配置文件:
    Redirect /sohu http://www.sohu.com
    以上指令访问http:10.4.5.135/sohu时,实际访问的是http://www.sohu.com
    Redirect指令有几个参数:
    temp:表示文件当前不在原来所请求的位置上,可以将来还会在这个位置上,现在只是临时的。这样,客户端会记住原始请求的URL。
    permanent:表示被请求的文件不在指定位置上,而是永久在新的位置上。这样,客户端会记住新的URL
    gone:表示文件不在此位置,而且以后也不在新的位置上。相当于404错误。但服务器会承认所请求的文件原来在此位置。所以不会被视为错误。
    seeother:表示文件不在所请求的位置,而且被不同位置的其它文件取代了(前三个参数都是指同一个文件,这个参数请是不同位置的不同文件取代了原来位置的原来文件)
    默认情况下是使用temp参数
    用RedirectMatch指令可以用正则表达式的方式将多个URL重定向至同一位置。具体用法详见前面AliasMatch的用法
    *************************************************************
    接受不区分大小写的URL:
    1.安装mod_speling模块
    2.在配置文件中添加:
     CheckSpelling On
    *************************************************************
    mod_rewrite模块可以重写URL请求中的文件,替换成指定的;可以拒绝访问未被引用的请求;可以依据查询字符串来重写;可以将所有请求重定向是单一主机;将服务器的全部或部分请求重定向至SSL等相关工作
    具体用法详见《apache经典实例》,比较复杂,不写了!
    *************************************************************
    使用系统帐号在web上进行身份验证:
    在配置文件中在想要控制的文件目录的领域下:
    <Directory "/usr/local/apache2/htdocs">
    AuthType Basic
    AuthName HomeDir
    AuthUserFile /etc/passwd
    Require valid-user
    Satisfy All
    </Directory>
    注意,由于/etc/passwd的文件格式和htpasswd管理的文件格式是一样的,所以我们才可以用/etc/passwd进行身份验证,不过我们现在的linux系统都采用/etc/shadow文件来存储密码,所以就无法用这种方式进行身份验证了。这时我们登录网页,虽然会提示我们输入用户名和密码,但永远无法正确通过验证
    所以此方法已不再适用,除非改成用/etc/passwd存放用户密码
    *************************************************************
    在子目录中放宽安全限制
    也就是说,比如我们现在已经在/usr/local/apache2/htdocs/这个目录上加上了用户名和密码的认证。但我们想在/usr/local/apache2/htdocs/php这个目录中不需要认证,使用户可以直接访问
    要达到上面的要求我们可以这样,在配置文件中加入:
    <Directory "/usr/local/apache2/htdocs/php">
    Satisfy Any
    Order Deny,Allow
    Allow from all
    </Directory>
    或者:
    在/usr/local/apache2/htdocs/php目录下建立.htaccess文件,把
    Satisfy Any
    Order Deny,Allow
    Allow from all
    这三行内容写在.htaccess文件里面。
    *************************************************************
    如果已经限制了一个目录的访问,需要用户名和密码,但想要放开这个目录中的其中一个文件(例如:back.html)的权限,使其可以任意访问,在配置文件中添加:
    <Files back.html>
    Satisfy Any
    Order Deny,Allow
    Allow from all
    </Files>
    *************************************************************
    查看通过验证的用户名称:
    可以查看REMOTE_USER环境变更。在access_log中也可以看到。
    *************************************************************
    禁止通过代理服务器访问特定的URL,修改配置文件:
    ProxyBlock .rm .ra .mp3

    <Directory proxy:http://10.4.5.135/music/>
    Order Allow,Deny
    Deny from all
    Satisfy All
    </Directory>
    上述方法都无法满足要求时,可以使用正则表达式的方式,使用Rewrite指令。
    *************************************************************
    想拒绝所有对目录中文件的访问,除了特殊指定扩展名的文件(比如.html文件):
    <Directory "/usr/local/apache2/htdocs/test">
    Satisfy all
    Order Allow,Deny
    Deny from all
            <Files *.html>
              Order Deny,Allow
              Allow from all
              Satisfy any
            </Files>
    </Directory>
    以上指令,使得test目录及其子目录下的所有非.html文件无法访问,只有.html的文件可以访问
    *************************************************************
    ab -n 1000 -c 20 http://10.4.5.135/back.html      测试apache性能的工具
    其中:
    -n 1000 表示请求的数目
    -c 20 表示一次送出20 个请求
    -h 可以查看帮助
    *************************************************************
    取得网站快照,修改配置文件:
    <Location /server-status>
        SetHandler server-status
    #    Order deny,allow
    #    Deny from all
    #    Allow from .example.com
    </Location>
    ExtendedStatus On
    *************************************************************
    将经常查看的文件存入高速缓存区,修改配置文件:
    MMapFile /usr/local/apache2/htdocs/index.html              需要安装mod_file_cache模块
    *************************************************************
    将目录列表存入高速缓存区,修改配置文件:
    IndexOptions +TrackModified
    *************************************************************
     
  • 相关阅读:
    C#多线程同步重新梳理
    word打不开,Microsoft Office Word 遇到问题需要关闭。。。总提示进入安全...
    SMTP协议
    【转载】Hadoop集群(第10期)_MySQL关系数据库 天高地厚
    备份与恢复的原理 . 天高地厚
    ubuntu server 使用parted分区 天高地厚
    Flex开发中遇到未整理资源 天高地厚
    Oracle RAC + Data Guard 环境搭建 . 天高地厚
    【转载】oracle事务之oracle读一致性 . 天高地厚
    理解PGA(2)pga_aggregate_target详解 . 天高地厚
  • 原文地址:https://www.cnblogs.com/pekkle/p/6568856.html
Copyright © 2011-2022 走看看