设为首页 收藏本站
查看: 1110|回复: 0

[经验分享] httpd.conf配置文件总结

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-8-12 08:55:45 | 显示全部楼层 |阅读模式
本文使用的httpd安装包为:httpd-2.2.15-29.el6.centos.x86_64     

  httpd的配置文件说明:
      主配置文件      
    Apache的配置文件是包含若干指令的纯文本文件,主配置文件名称通常为httpd.conf,可以用Include指令和通配符附加许多其他配置文件。任何配置文件都可以使用任何指令。只有在启动或重新启动Apache后,主配置文件的更改才会生效。服务器还会读取一个包含MIME文件类型的文件,其文件名由TypesConfig指令确定,默认值是/etc/mime.types(mod_mime)

      配置文件的语法      
    Apache配置文件的每一行包含一个指令,在行尾使用反斜杠"\"可以表示续行,但是反斜杠与下一行之间不能有任何其他字符(包括空白字符)。      
    配置文件中的指令是不区分大小写的,但是指令的参数(argument)通常是大小写敏感的。以"#"开头的行被视为注解并被忽略。空白行和指令前的空白字符将被忽略,因此可以采用缩进以保持配置层次的清晰。      
    可以用 apachectl configtest 或者命令行httpd -t 、apachectl -t 检查配置文件中的错误,而无须启动Apache服务器。

      模块      
    Apache是模块化的服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载。默认情况下,只有base组的模块被编译进了服务器。如果服务器在编译时包含了DSO模块,那么各模块可以独立编译,并可随时用LoadModule指令加载;否则,要增加或删除模块必须重新编译整个Apache。用于特定模块的指令可以用<IfModule>指令包含起来,使之有条件地生效。

      指令的作用域      
    主配置文件中的指令对整个服务器都有效。如果你只想改变某一部分的配置,你可以把指令嵌入到<Directory>、<DirectoryMatch>、<Files>、<FilesMatch>、<Location>、<LocationMatch>配置段中,这样就可以限制指令的作用域为文件系统中的某些位置或特定的URL。这些配置段还可以进行嵌套,以进行更精细的配置。

         # grep "Section" httpd.conf     
      ### Section 1: Global Environment                # 全局环境参数      
      ### Section 2: 'Main' server configuration        # “主”服务器配置      
      ### Section 3: Virtual Hosts                        # 虚拟主机

        主服务器和虚拟主机一般不同时使用;默认仅启用了主服务器;     
       指令参数:指令不区分字符大小写,但指令的参数(argument)通常是大小写敏感的。

    1、持久连接
      KeepAlive {On|Off}        # 启用|关闭HTTP持久链接     
    MaxKeepAliveRequests 100    # 一个持久链接中允许的最大请求数量      
    KeepAliveTimeout 15        # 持久链接中服务器在两次请求之间等待的秒数

  2、MPM参数:
  <IfModule prefork.c>     
    StartServers       8     # 服务器启动时建立的子进程数量      
    MinSpareServers    5     # 空闲子进程的最小数量      
    MaxSpareServers   20   # 空闲子进程的最大数量      
    ServerLimit      256     # 服务器允许配置的进程数上限      
    MaxClients       256     # 请求的最大子进程数量      
    MaxRequestsPerChild  4000        # 一个服务进程允许的最大请求数      
</IfModule>      

  <IfModule worker.c>     
    StartServers         4        # 服务器启动时的服务进程数目      
    MaxClients         300       # 允许同时连接的最大用户数目      
    MinSpareThreads     25    # 保有的最小工作线程数目      
    MaxSpareThreads     75   # 保有的最大工作线程数目      
    ThreadsPerChild     25     # 每个服务进程中的工作线程数      
    MaxRequestsPerChild  0   # 服务进程中允许的最大请求数目      
</IfModule>   

  3、监听指定的地址和端口         
    Listen [IP:]PORT

      Listen指令告诉服务器接只受来自特定端口(或地址+端口的组合)的请求。     
    如果Listen指令仅指定了端口,则服务器会监听所有的IP地址;      
    如果指定了地址+端口的组合,则服务器只监听来自此特定地址上特定端口的请求。      
    可以使用多个Listen指令,可以指定在多个地址和端口上进行监听。      
    要实现虚拟主机VirtualHost,首先必须告诉服务器需要监听哪些地址和端口;      
    如果将<VirtualHost>段设置为服务器没有监听的地址和端口,则相应的虚拟机不生效。

  4、DSO机制装载的模块      
    显示:# httpd -D DUMP_MODULES      
        等价于:httpd -M      
        LoadModule Module_Name /path/to/Module_File   
  5、指定站点根目录
      DocumentRoot directory-path  
    指定DocumentRoot时不应包括最后的"/"。目录通常为绝对路径。      
    如果服务器有多个虚拟主机,使用每个虚拟主机自己的DocumentRoot来组成文件系统路径

  6、站点路径访问控制      
    基于本地文件系统路径:      
        <Directory "/path/to/somewhere">

          </Directory>
      基于URL访问路径做访问控制     
        <Location "/path/to/URL">      
        </Location>   

  7、于Directory中可用的访问控制      
    (1) Options      
    Options指令控制了在特定目录中将使用哪些服务器特性。      
      All     # 除MultiViews之外的所有特性。这是默认设置。      
      Indexes    # 如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会返回由mod_autoindex生成的一个格式化后的目录列表(将所有资源以列表形式呈现给用户);危险,慎用;      
      FollowSymLinks        # 服务器允许在此目录中使用符号连接。(跟踪符号链接)      
      ExecCGI        # 允许使用mod_cgi执行CGI脚本。      
        注意:即使服务器会使用符号连接,但它不会改变用于匹配<Directory>段的路径名。如果此配置位于<Location>配置段中,则此设置会被忽略。      
      Includes    # 允许使用mod_include提供的服务器端包含。      
      SymLinksIfOwnerMatch        服务器仅在符号连接与其目的目录或文件的拥有者具有相同的uid时才使用它。

       (2) AllowOverride     
      支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。但不可以出现在Location控制域中

  8、基于IP做访问控制      
    Order allow,deny      
    Deny from 172.16.100.17      
    Allow from 172.16.0.0/16

      from后面能接受的地址格式:     
        IP, Network Address      
    网络地址格式较为灵活:      
        172.16      
        172.16.0.0      
        172.16.0.0/16      
        172.16.0.0/255.255.0.0

  9、定义默认的主页面    DirectoryIndex      
   当客户端请求一个目录时寻找的资源列表,可以指定多个URL,服务器将返回最先找到的那一个。若一个也没有找到,并且那个目录设置了Indexes选项,服务器将会自动产生一个那个目录中的资源列表。指定的文档不一定必须位于被请求的目录下,也可以指定一个绝对URL来指向其他位置      
       例:  DirectoryIndex index.html index.php /cgi-bin/index.sh

  10、配置日志功能      
    ErrorLog "/path/to/error_log"      
    LogLevel {debug|info|notice|warn|error|crit|alert|emerg}

      LogFormat      
    CustomLog "/path/to/access_log" LogFormat_Name

          %h: 客户端地址     
        %l: 远程登录名,通常为-      
        %u: 认证时输入用户名,没有认证时为-      
        %t: 服务器收到 用户请求时的时间      
        %r:请求报名的起始行      
        %>s: 响应状态码      
        %b: 响应报文的长度,单位是字节      
        %{HEADER_NAME}i: 记录指定首部对应的值

  11、路径别名(访问DocumentRoot以外的文件)
      可以在文件系统的DocumentRoot目录下放置符号连接以访问其外部文件,     
    考虑到安全问题,这种方法仅在相应目录的Options指令中设置了FollowSymLinks或SymLinksIfOwnerMatch时才有效。      
    使用Alias指令可以将文件系统的任何部分映射到网络空间中

      AliasMatch ,使用正则表达式映射URL到文件系统,这个指令与Alias等效     
    AliasMatch ^/icons(.*) /usr/local/apache/icons$1

      实现URL路径的映射,从而所访问的资源不再依赖于站点根目录;     
     Alias /URL/ "/path/to/somewhere/"

  12、设定默认字符集      
     AddDefaultCharset UTF-8      
    字符集:GB2312, GB18030, GBK        UTF

  13、CGI脚本      
    CGI脚本路径别名

      /var/www/cgi-bin/     
        
http://server/cgi-bin/
      bash写CGI脚本:     
        所有文本都使用命令输出:echo, printf, cat      
        执行程序:命令引用

          Content-Type: text/html     
        <pre>      
            
        FastCGI: 协议
  14、基于用户访问控制      
    用户认证:      
        基本认证: Basic      
        摘要认证:digest

      虚拟用户:仅用于访问某服务或获取某资源的凭证;     
        文本文件:.htpasswd      
        SQL数据库      
        dbm: 数据库引擎,提供API      
        ldap:

      authentication provider: 账号和密码的存储机制;     
        authn

      authorization provider: 授权
      案例:基于文件做访问控制
      (1) 基于用户进行认证
          <Directory "/var/www/html/admin">     
             Options none      
             AllowOverride AuthConfig      
             AuthType Basic      
             AuthName "Admin Area."      
             #AuthBasicProvider file      
             AuthUserFile /etc/httpd/conf/.htpasswd      
             Require valid-user      
        </Directory>

              Require valid-user: 文件中所有用户均可访问     
            Require user USERNAME, ...

      (2) 提供认证文件     
        htpasswd      
          -c: 如果此文件事先不存在,则创建;注意,只能在创建第一个用户时使用;      
          -m:以md5的格式编码存储用户的密码信息      
          -D:删除指定用户

      (3) 组认证     
        <Directory "/var/www/html/admin">      
             Options none      
             AllowOverride AuthConfig      
             AuthType Basic      
             AuthName "Admin Area."      
             #AuthBasicProvider file      
             AuthUserFile /etc/httpd/conf/.htpasswd      
             AuthGroupFile /etc/httpd/conf/.htgroup      
             Require group GROUP_NAME      
        </Directory>            

          组文件:     
            组名:user1 user2 user3

  15、虚拟主机
       虚拟主机:使用单个Apache实例提供多个网站。使用不同访问路径.     
     是指在一个机器上运行多个网站(比如:
www.a.comwww.b.com)。     
     如果每个网站拥有不同的IP地址,则虚拟主机可以是"基于IP"的;      
     如果只有一个IP地址,也可以是"基于主机名"的,其实现对最终用户是透明的。      

      (1) 使用虚拟的前提:取消主服务器     
        注释主服务器的站点根路径指定:DocumentRoot      
        
NameVirtualHost addr[:port];为一个基于域名的虚拟主机指定一个IP地址(和端口)。        
       注意:
<VirtualHost>指令的参数必须与NameVirtualHost指令的参数完全匹配。

   (2) 定义虚拟主机     
     NameVirtualHost IP:PORT

          <VirtualHost IP:PORT>     
            ServerName     # 指令来指定伺服哪个主机      
            DocumentRoot  # 来说明这个主机的内容位于文件系统的什么地方      
            ServerAlias      
            ErrorLog           
            CustomLog      
        </VirtualHost>

      配置文件语法检查:     
        httpd -t      
        service httpd configtest

      文本浏览器测试:elinks     
        -dump: 获取到页面数据后直接退出进程;

  16、https协议     
    ssl(安全的套接字层), tls(传输层安全)

      http协议:文本编码
          验正:使用telnet发请求
  验正:使用telnet发请求
   1 验正:使用telnet发请求 2 3 # telnet 172.16.100.7 80 4 Trying 172.16.100.7... 5 Connected to 172.16.100.7. 6 Escape character is '^]'. 7 GET /index.html HTTP/1.0 8 Host: www.b.org 9 10 HTTP/1.1 200 OK11 Date: Fri, 08 Aug 2014 03:03:51 GMT12 Server: Apache/2.2.15 (CentOS)13 Last-Modified: Fri, 08 Aug 2014 02:14:52 GMT14 ETag: "e0009-12-50014c53e753f"15 Accept-Ranges: bytes16 Content-Length: 1817 Connection: close18 Content-Type: text/html; charset=UTF-819 20 <h1> Host B </h1>21 Connection closed by foreign host.   

  
    httpd: ssl        
        ssl模块   
            单独成包

    ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;
    ssl握手要完成的工作:   
        交换协议版本号   
        选择双方都支持的加密方式   
        客户端对服务器端实现身份验正   
        密钥交换

    https协议: 基于SSL二进制编码, 443/tcp   
        openssl s_client

    客户端验正服务器端证书:   
        有效性检测:证书是否仍然在有效期内   
        CA的可信度检测:   
        证书的完整性检测:   
        持有者的身份检测

    配置httpd工作于https:   
    (1) 安装mod_ssl模块   
    # yum install mod_ssl

    (2) 为服务端生成私钥,并为其提供证书;
     详细参考之前的OpenSSL搭建私有OA流程。   
    # mkdir /etc/httpd/ssl && cd /etc/httpd/ssl   
    # (umask 077; openssl genrsa -out httpd.key 1024)   
    # openssl req -new -key httpd.key -out httpd.csr

    签署后的证书为:/etc/httpd/ssl/httpd.crt
    (3) 配置使用https的虚拟主机;
    SSLCertificateFile   
    SSLCertificateKeyFile

    <VirtualHost IP:443>   
        DocumentRoot   
        ServerName   
    </VirtualHost>

    (4) 重新装载配置
    (5) 测试   
    # openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate

17、status页面   
    httpd内嵌有handler,其中有一个handler用于输出当前httpd服务相关状态信息

        handler: server-status        
        启用handler要使用SetHandler指令   
            handler: 当文件被调用时,apache内部表示形式;一般每种文件类型都有其隐式处理器
18、访问属性配置总结   
    配置文件系统访问路径:   
    <Directory [~] "">   
    </Directory>

    <File [~] "">   
    </File>

    配置URL访问路径:   
    <Location [~] "">  #模式匹配   
    </Location>

    <LocationMatch "">  #正则表达式匹配     
    </LocationMatch>

19、curl命令
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
curl的常用选项:
    -A/--user-agent <string> 设置用户代理发送给服务器   
    -basic 使用HTTP基本认证   
    --tcp-nodelay 使用TCP_NODELAY选项   
    -e/--referer <URL> 来源网址   
    --cacert <file> CA证书 (SSL)   
    --compressed 要求返回是压缩的格式   
    -H/--header <line>自定义头信息传递给服务器   
    -I/--head 只显示响应报文首部信息   
    --limit-rate <rate> 设置传输速度   
    -u/--user <user[:password]>设置服务器的用户和密码   
    -0/--http1.0 使用HTTP 1.0

  
20、使用mod_deflate模块压缩页面优化传输速度
SetOutputFilter DEFLATE
1 # mod_deflate configuration 2 3 4     # Restrict compression to these MIME types 5     AddOutputFilterByType DEFLATE text/plain 6     AddOutputFilterByType DEFLATE text/html 7     AddOutputFilterByType DEFLATE application/xhtml+xml 8     AddOutputFilterByType DEFLATE text/xml 9     AddOutputFilterByType DEFLATE application/xml10     AddOutputFilterByType DEFLATE application/x-javascript11     AddOutputFilterByType DEFLATE text/javascript12     AddOutputFilterByType DEFLATE text/css13 14     # Level of compression (Highest 9 - Lowest 1)15     DeflateCompressionLevel 916      17     # Netscape 4.x has some problems.18     BrowserMatch ^Mozilla/4 gzip-only-text/html19      20     # Netscape 4.06-4.08 have some more problems21     BrowserMatch ^Mozilla/4\.0[678] no-gzip22      23     # MSIE masquerades as Netscape, but it is fine24     BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

   

示例:
实现对server-status的用户访问控制
1 <Location /server-status> 2     SetHandler server-status 3     Order deny,allow 4     Allow from 172.16.19.0/16 5 </Location> 6 7 <Location /server-status> 8 #    Options none 9 #    AllowOverRide AuthConfig    #此选项不可以出现在Location里面10     AuthType Basic11     AuthName "Admin Area."12     # AuthBasicProvider file           # 此选项可有可无13     AuthUserFile /etc/httpd/conf/.htpasswd14     Require user www115 </Location>

分别实现基于IP、域名、端口的虚拟主机
1 # DocumentRoot "/var/www/html" 2 Listen *80 3 Listen 172.16.19.28080 4 5 NameVirtualHost 172.16.19.2 6 7 <VirtualHost 172.16.19.2:80> 8     ServerName www1.stu19.com 9     DocumentRoot /web/vhosts/www110     ErrorLog /var/log/httpd/www1.err11     CustomLog /var/log/httpd/www1.access combined12 </VirtualHost>13 14 <VirtualHost 172.16.19.2:8080>15    ServerName www2.stu19.com16    DocumentRoot /web/vhosts/www217    ErrorLog /var/log/httpd/www2.err18    CustomLog /var/log/httpd/www2.access combined19 </VirtualHost>20 21 <VirtualHost 172.16.19.3:80>22     ServerName www.c.com23     DocumentRoot /web/vhosts/www324     ErrorLog /var/log/httpd/www3.err25     CustomLog /var/log/httpd/www3.access combined26 </VirtualHost>



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23536-1-1.html 上篇帖子: httpd-2.4源码编译安装 下篇帖子: (Class 'ZipArchive' not found )linux apache 添加 zip模块 配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表