Apache基本配置指南

Apache基本配置指南

1、如果找不到文件的具体位置,在Linux下可以用类似locate httpd.conf的指令来搜索文件的位置。如果搜索不到,可以先用updatedb指令更新索引数据库再用locate搜索。

2、apachectl configtest或apachectl –t检查配置文件是否合法。apachectl一般位于安装目录的bin目录下(如:/usr/local/apache2/bin)。不要直接调用httpd。

3、配置文件是httpd.conf;在Linux系统中,它可能存在于系统配置目录(如:/etc/httpd/conf/),也可能存在于Apache的安装目录(如:/usr/local/apache2/conf)。

4、配置文件中,一行包含一个指令,但行尾可以用/表示续行。/与下一行之间不能有其它任何字符,包括空白字符。
#表示这一行是注释。

5、指令对大小写不敏感,但是参数对大小定敏感,在Linux系统下,路径也要注意大小写。路径后不必加/。

6、类似于表示一个配置段。大多数配置段中的指令仅针对配置段所匹配的请求有效。但诸如        之类,是在Apache启动时,如果条件成立才有效,并且对所有请求都有效。

httpd.conf的基本配置选项

7、ServerName服务器名称。它用来创建URL的重导向。ServerName是apache服务器自身识别访问请求的标记之一,他不必与实际IP或DNS名称一致。也可以不设置,如果这样,那apache会试图用IP来作为请求的标记。端口也可以不设置。
例:ServerName www.example.com:80

8、ServerAdmin管理员的电子邮件地址。服务器的错误提示页会用到。如果ServerSignature定义为Email的话,将在错误页的页尾增加ServerAdmin的链接。

9、Listen服务器监听的地址和端口。端口一定要指定。默认情况下,服务器会监听本机的所有地址。可以同时使用多个Listen指令。
例一:同时所有接受来自端口80和8000的请求
    Listen 80
    Listen 8080
例二:指定地址+端口,配置虚拟主机时,会需要这样设置。详细看虚拟主机的设置。这并不是必要的。
    Listen 192.168.0.2:80
    Listen 192.168.0.1:8080
    注意地址是本机的地址,是指客户端对本机某个地址的请求。地址可以是域名,但最好是IP地址。
例三:IPv6地址必须用方括号括起来。
    Listen [2001:db8::a00:20ff:fea7:ccea]:80
例四:要使Apache只处理IPv4的请求,只需如此:
    Listen 0.0.0.0:80

10、ServerRoot 服务器基础目录,一般就是Apache的安装目录,不必更改。

11、DocumentRoot 指定主目录。不指定的话,默认目录一般是ServerRoot目录下的htdocs目录(如/usr/local/apache2/htdocs),视版本而定;但是可能会有例外,所以最好指定。如果指定相对路径,则认为是相对于ServerRoot目录的。目录后不要加/。

12、DirectoryIndex 默认首页名称。多个默认页名称用空格隔开。

13、ErrorDocument 处理请求出错时的处理方式。未配置时只返回错误代码。
例:
    ErrorDocument 500 "The server made a boo boo."
    # 指定本地URL时,该URL是相对于DocumentRoot目录的。
    ErrorDocument 404 /missing.html
    ErrorDocument 404 "/cgi-bin/missing_handler.pl"
    # 使用绝对URL时,客户机将无法收到错误码。
    ErrorDocument 402 http://www.example.com/subscription_info.html

14、ErrorLog,CustomLog 指定错误日志和访问日志。如果指定路径是相对路径,则认为是相对ServerRoot目录的。日志文件可能会很大,以至影响到其它文件的储存空间,所以有必要把日志文件放到一个单独的分区。
例一:
    ErrorLog /var/log/error_log
    # commom是日记文件的格式,由LogFormat定义。不可用于ErrorLog。
    Customlog /var/log/access_log common
例二:管道日志,可以用Apache提供的rotatelogs来实现。rotatelogs程序一般位于安装目录的bin目录。
    # 这将每24小时建立日志文件/var/log/logfile.nnnn,nnnn是日记建立时的系统时间。
    CustomLog “|bin/rotatelogs /var/log/logfile 86400”common
    # 日志文件达到5M时建立新日记,文件名类似于logfile.2006-12-30-24_33_12。
    ErrorLog “|bin/rotatelogs /var/log/logfile.%Y-%m-%d-%H_%M_%S 5M”

15、User, Group 指定运行服务子进程的用户和组。Rpm包安装apache时会自动设置一个用户和组,但有时会设成nobody或者不设置。为了安全和方便管理,设置为用户和组为apache是很重要的。
例:User apache
    Group apache
注意在Linux系统中手动添加apache用户和组时,必须把他们的shell指定为nologin

虚拟主机

16、虚拟主机通过配置段来配置,配置段里的指令对虚拟主机有效,配置段没有配置的,将采用全局的配置。检查虚拟主机的配置可用apachectl –S(可能某些版本这个参数无效)。

17、基于域名的虚拟主机在DNS把多个域名都映射到同一IP的情况下有用。典型的配置如下:
NameVirtualHost *:80

    ServerAdmin [email protected]
    DocumentRoot /www/docs/test.com
    ServerName test.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common


    DocumentRoot /www/docs/test2.com
    ServerName test2.com

NameVirtualHost *:81

    DocumentRoot /www/docs/test3.com
    ServerName test3.com

    注意一:NameVirtualHost 指定虚拟主机所使用的IP地址或域名,但是最好是IP地址。使用基于域名的虚拟主机时,NameVirtualHost是必要的指令。NameVirtualHost可以定义多个。
    注意二:所有符合NameVirtualHost或标签定义的请求,都会被作为虚拟主机处理,而主服务器将不理会。NameVirtualHost定义了而标签没有定义的的请求,服务器会找不到相应的虚拟主机而将无法处理。所以每个NameVirtualHost定义的参数至少要有一个相匹配。
    注意三:如果设置NameVirtualHost 或为*:80的话,所有针对80端口的请求,都会被虚拟主机处理,请求会根据域名指向某个虚拟主机。如果有来自80端口的请求,而所请求的域名没有被配置为虚拟主机,那将指向第一个虚拟主机。这样主服务器将无法收到来自80端口的任何请求。为此也要为主服务器配置一个虚拟主机。

18、ServerAlias 虚拟主机的别名
例:
    NameVirtualHost *:80
   
        ServerName www.domain.tld
        ServerAlias domain.tld *.domain.tld
        DocumentRoot /www/domain
   

    这表示对 domain.tld和*.domain.tld的请求也由虚拟主机www.domain.tld处理。

19、ServerPath指令是用于让某些老式浏览器也访问基于域名的虚拟主机的,一般不必设置。

20、基于IP地址的虚拟主机。例:
Listen 80

    DocumentRoot /www/example1
    ServerName www.example.com


    DocumentRoot /www/example2
    ServerName www.example.org

每个虚拟主机可定义多个IP,之间用空格隔开。

21、各种虚拟主机的混用。例:
Listen 80
Listen 81

NameVirtualHost 172.20.30.40

DocumentRoot /www/example1
ServerName www.example.com


DocumentRoot /www/example2
ServerName www.example.org

NameVirtualHost 172.20.30.40:81

DocumentRoot /www/example3
ServerName www.example3.net

# IP-based

DocumentRoot /www/example4
ServerName www.example4.edu


DocumentRoot /www/example5
ServerName www.example5.gov

22、虚拟主机混用时的问题:
一、虚拟主机混用可以这样理解:一行NameVirtualHost指令定义的所有虚拟主机为一组;该组与一个基于IP的虚拟主机平级。即把一行NameVirtualHost定义的整个组看作是一个基于IP的虚拟主机。
二、虚拟主机指定的端口必须是Listen定义的。如果虚拟主机没有指定端口,则认为是80端口。如果NameVirtualHost * 这样定义,是指所有地址的所有已定义端口。
三、更具体的地址定义优先。比如NameVirtualHost指令定义了*:80,而某个基于IP的虚拟主机定义为192.168.0.1:80,那么此时如有对192.168.0.1:80的请求,那请求会被优先指向192.168.0.1:80定义的虚拟主机。所以为了避免混乱,不要定义相互有交叉或包含的地址区间。
四、一个虚拟主机,可以同时为基于域名和基于IP的。如上一例中最后一个虚拟主机。这样符合两种定义的请求都会被指同一个虚拟主机。有时要区别内外网对虚拟主机的访问时可以这样,因为来自内网的请求可能和来自外网的请求可能不一样,但是它们需要指向同一个虚拟主机。

23、使用"_default_"虚拟主机,这个虚拟主机可以理解成基于IP的虚拟主机。例:

    DocumentRoot /www/default

这个虚拟主机将接管与其它虚拟主机IP和端口不匹配的请求。不过如此一来,主服务器将不会处理任何请求。因此把主服务器配置成一个虚拟主机是必要的。

24、本地机器代理在其它机器上运行的虚拟主机。例:

    ProxyPreserveHost On
    ProxyPass /foo/no !
    ProxyPass /foo http://192.168.111.2
    ProxyPassReverse /foo http://192.168.111.2
    ServerName hostname.example.com

    一、首先这是一个基于IP的虚拟主机,它接收并处理对IP地址158.29.33.248的请求。
    二、ProxyPass /foo http://192.168.111.2 将把对http://158.29.33.248/foo的请求转换为一个代理请求,该请求指向http://192.168.111.2。
    三、ProxyPass /foo/no ! 不代理针对/foo/no的请求。这个必须放在正常代理指令之前。
    四、ProxyPreserveHost On 意思是传送原始请求的Host信息给被代理的机器。
    五、ProxyPassReverse /foo http://192.168.111.2 可以保证请求URL在其它机器上被重定向后,本机处理时也可以保持一致。具体看手册关于反向代理的部分。
    六、基于域名的虚拟主机也是同样的道理。不管是什么类型的虚拟主机,它只是处理归它处理的请求而已。

配置段

25、 只有在用httpd命令行启动服务器时(最好不要直接使用httpd,用apachectl代替),使用了-D参数定义了相应参数时才生效。如服务器用apachectl –D test启动时,配置段生效。

26、 例如:= 2.0.55> 当Apache版本不低于2.0.55时生效。

27、 服务器启用了指定的模块后才生效。这是最常用的。例如

28、 用于封装一组指令,使之对某个目录和下属的子目录有效。
例:
   
        Options FollowSymLinks Indexes
        AllowOverride None
        Order Deny,Allow
        Deny from All
        Allow from example.com
   

    该配置段对整个根目录树有效。
    一、Options 常用选项:FollowSymlinks允许在此目录中使用符号链接;Indexes允许目录列表,即在该目录没有默认页时服务器返回该目录的列表给客户机;SymLinksIfOwnerMatch只有符号链接与其目的目录或文件属于同一用户时才有效。
    注意:对同一目录,只有一行Options有效,如果定义某个目录的Options同时要继承上级目录的定义,可以这样:Options +Indexes。如果这样:Options +Indexes –FollowSymLinks,这将为本级目录增加Indexes,取消FollowSymLinks。
    二、AllowOverride 常用选项:None 不允许使用.htaccess;All允许在.htaccess中使用所有的指令。一般不必使用.htaccess,而且为了安全和效率起见,设置为None比较好。
    三、Order 访问控制,控制条件由Deny行和Allow行定义。Order指令常用选项:Deny,Allow 除了符合条件的外,其它的也允许访问;Allow,Deny 除了符合条件的外,其它的不允许访问。
    Deny from All是拒绝所有的访问,Allow from example.com是允许example.com域访问该目录(意思是如果该服务器上有多个虚拟主机的话,只有example.com可以访问该目录)。三行合起来的意思就是只允许example.com域访问根目录。当然这只是个例子,应该禁止所有域对根目录的访问。注意:Deny,Allow指令生效的顺序取决于Order中Deny和Allow的顺序。
    注意不能嵌套。
    这样为了安全起见常常需要设置:
    #拒绝对所有目录的访问,注意这里的/是指操作系统的根目录,而非DocumentRoot目录。
   
        Options –Indexes -FollowSymLinks
        AllowOverride None
        Order Allow,Deny
   

    #允许所有对/var/htdocs的访问,允许对/var/htdocs的文件列表。
   
        Options +Indexes
        Order Deny,Allow
   

29、类似,不过它定义的是对文件的访问控制。它们都可以接受正则表达式为参数,格式如或者

30、同,不过它定义的是对URL的访问控制。

PHP配置

31、加载php模块:LoadModule php5_module modules/libphp5.so

32、AddModule mod_php5.c (不是必须的)

33、哪种后缀的文件作为php脚本来解析:AddType application/x-httpd-php .php (这是必须的,但是可以用下面的配置代替):

    SetOutputFilter PHP
    SetInputFilter PHP

这种方法还可以为.php文件专门设置更多的配置。

34、哪种后缀的文件是php源文件:Addtype application/x-httpd-php-source .phps (不是必须的)

35、添加index.php为目录首页:DirectoryIndex index.php(视情况而定)

36、ScriptAlias /php/ /usr/local/php/ 对类似http://example/php/abc.php的请求将引导执行/usr/local/php/abc.php脚本。 (一些所谓配置指南里有,事实上完全没有这个必要。并且ScriptAlias这个指令是针对CGI脚本的。他会把php脚本也当作已定义的cgi脚本处理)。

37、Action application/x-httpd-php "C:/PHP/php.exe" 所有application/x-httpd-php类型的文件都由C:/PHP/php.exe来处理,注意application/x-httpd-php必须是已经定义的文件类型。 (只有在windows中以CGI模式安装PHP时才有用)。

38、事实上,必要的配置只有这么两条:
    LoadModule php5_module modules/libphp5.so
    AddType application/x-httpd-php .php
可以把相关php的配置语句都放在一起便于管理。简单至此,不要被一些配置指南吓住了。

环境变量、URL重写和防盗链

 

原文地址:

http://bbs.phpchina.com/viewthread.php?tid=38848

posted on 2008-06-25 14:35  jom_ch 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/jom-ch/archive/2008/06/25/2676075.html

你可能感兴趣的:(Apache基本配置指南)