httpd.conf配置文件总结

本文使用的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.com和www.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 OK
11 Date: Fri, 08 Aug 2014 03:03:51 GMT
12 Server: Apache/2.2.15 (CentOS)
13 Last-Modified: Fri, 08 Aug 2014 02:14:52 GMT
14 ETag: "e0009-12-50014c53e753f"
15 Accept-Ranges: bytes
16 Content-Length: 18
17 Connection: close
18 Content-Type: text/html; charset=UTF-8
19
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/xml
10     AddOutputFilterByType DEFLATE application/x-javascript
11     AddOutputFilterByType DEFLATE text/javascript
12     AddOutputFilterByType DEFLATE text/css
13
14     # Level of compression (Highest 9 - Lowest 1)
15     DeflateCompressionLevel 9
16
17     # Netscape 4.x has some problems.
18     BrowserMatch ^Mozilla/4 gzip-only-text/html
19
20     # Netscape 4.06-4.08 have some more problems
21     BrowserMatch ^Mozilla/4\.0[678] no-gzip
22
23     # MSIE masquerades as Netscape, but it is fine
24     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 Basic
11     AuthName "Admin Area."
12     # AuthBasicProvider file           # 此选项可有可无
13     AuthUserFile /etc/httpd/conf/.htpasswd
14     Require user www1
15 </Location>

分别实现基于IP、域名、端口的虚拟主机

 1 # DocumentRoot "/var/www/html"
 2 Listen *:80
 3 Listen 172.16.19.2:8080
 4
 5 NameVirtualHost 172.16.19.2
 6
 7 <VirtualHost 172.16.19.2:80>
 8     ServerName www1.stu19.com
 9     DocumentRoot /web/vhosts/www1
10     ErrorLog /var/log/httpd/www1.err
11     CustomLog /var/log/httpd/www1.access combined
12 </VirtualHost>
13
14 <VirtualHost 172.16.19.2:8080>
15    ServerName www2.stu19.com
16    DocumentRoot /web/vhosts/www2
17    ErrorLog /var/log/httpd/www2.err
18    CustomLog /var/log/httpd/www2.access combined
19 </VirtualHost>
20
21 <VirtualHost 172.16.19.3:80>
22     ServerName www.c.com
23     DocumentRoot /web/vhosts/www3
24     ErrorLog /var/log/httpd/www3.err
25     CustomLog /var/log/httpd/www3.access combined
26 </VirtualHost>

httpd.conf配置文件总结

时间: 2024-10-08 02:41:28

httpd.conf配置文件总结的相关文章

LAMP架构之:httpd.conf配置文件解析

各位小伙伴,有一段时间没写web架构方面的内容了,今天聊一聊WEB架构中apache的配置文件httpd.conf.这里的配置文件是基于apache2.2的版本,之所以没用2.4的版本,是因为现在系统自 带的都是2.2的版本,rpm包安装起来也方便,如果你也是rpm包安装,也能保证咱俩的配置是一样的,而且默认的rpm包安装所有的配置都会在一个文件中,这个相比分割开来要容易说一点.但是我还是会提一下2.4相比2.2中有几个必须要知道的变化,至于其他的内容基本都是一样的.. 下面提炼出了2.2中所有

Apache2 httpd.conf配置文件中文版详解

这篇文章转载于http://www.cnblogs.com/xkxk/p/5501821.html Apache2 httpd.conf配置文件中文版详解## 基于 NCSA 服务的配置文件.##这是Apache服务器主要配置文件.#它包含服务器的影响服务器运行的配置指令.#参见以取得关于这些指令的详细信息##不要只是简单的阅读这些指令信息而不去理解它.#这里只是做了简单的说明,如果你没有参考在线文件,你就会被警告.##这些配置指令被分为下面三个部分:#1. 控制整个Apache服务器行为的部分

Apache httpd.conf 配置文件语法验证

Apache 的 httpd.conf文件改动之后,必须重新启动server才干生效. 有时server在提供服务的时候,直接更改配置,重新启动服务.会带来非常大的危急性. 假设能在改动配置之后,先验证语法正确与否,再重新启动server.则能避免一些不必要的错误. 对以上需求,Apache本身提供了对应的命令来验证配置文件的语法. Windows环境的命令: httpd -t Linux环境的命令: [[email protected] bin]# ./apachectl configtest

Apache2.2和Apache2.4中httpd.conf配置文件 权限的异同

Windows环境从Apache2.2改成Apache2.4后httpd.conf中的设置异同. 1.权限设定方式变更 2.2使用Order Deny / Allow的方式,2.4改用Require apache2.2: Order deny,allow Deny from all apache2.4: Require all denied 此处比较常用的有如下几种: Require all denied Require all granted Require host xxx.com Requ

Apache httpd.conf配置文件AllowOverride参数详解

AllowOverride从字面上解释是允许覆盖的意思,即Apache允许另一配置文件覆盖现有配置文件. 我们通常利用Apache的rewrite模块对URL进行重写,rewrite规则会写在 .htaccess 文件里.但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置. 从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override,即: < Directory /> AllowOverride No

httpd (apache) 配置文件(httpd.conf)英文对中文的详解

最近几天看了一些关于httpd的书籍,顺便把学习到的知识记录下来,算不上很精通, 只是些皮毛,可以帮助一些英文不好的 刚接触Linux 下httpd的同学,有错的请评论纠正. httpd特性和功能: 事先创建进程 按需求维持适当的进程 模块化设计,核心比较小,各种功能都模块添加 支持运行配置,支持单独编译模块 支持多种方式的虚拟主机配置:(基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机) 支持https协议(mod_ssl) 支持用户认证 支持基于IP或主机名的ACL 支持每个目录的

vim /etc/httpd/conf/httpd.conf

[[email protected] httpd]# cat -n /etc/httpd/conf/httpd.conf  //httpd.conf配置文件初始值 1 # 2 # This is the main Apache server configuration file. It contains the 3 # configuration directives that give the server its instructions. 4 # See <URL:http://httpd

httpd.conf详解,因为php始终报fileinfo扩展无法加载的错

1 # 2 # This is the main Apache HTTP server configuration file. It contains the 3 # configuration directives(官方指示) that give the server its instructions(指示). 4 # See <URL:http://httpd.apache.org/docs/2.4/> for detailed information. 5 # In particular

Apache的主配置文件:/etc/httpd/conf/httpd.conf

Apache的主配置文件:/etc/httpd/conf/httpd.conf默认站点主目录:/var/www/html/Apache服务器的配置信息全部存储在主配置文件/etc/httpd/conf/httpd.conf中,这个文件中的内容非常多,用wc命令统计一共有1009行,其中大部分是以#开头的注释行.[[email protected] ~]# wc -l /etc/httpd/conf/httpd.conf 1009 /etc/httpd/conf/httpd.conf [[emai