澳门皇冠金沙网站-澳门皇冠844网站

热门关键词: 澳门皇冠金沙网站,澳门皇冠844网站

httpd配置文件规则说明和一些基本指令,conf规则

本文目录:
1.1 httpd命令和apachectl命令
1.2 配置文件规则和常见指令
 1.2.1 Listen指令
 1.2.2 ServerRoot指令
 1.2.3 DocumentRoot指令
 1.2.4 DirectoryIndex指令
 1.2.5 ServerName和ServerAlias
 1.2.6 Include指令
 1.2.7 Define和UnDefine指令
 1.2.8 VirtualHost指令
 1.2.9 Options和AllowOverride指令
 1.2.10 Require指令
 1.2.11 长连接相关指令
1.3 容器类指令
 1.3.1 容器< Directory >和< Files >
 1.3.2 容器< Location >
 1.3.3 < IfDefine >、< IfModule >和< IfVersion >条件判断
 1.3.4 < If >、< ElseIf >和< Else >容器
1.4 配置文件的合并规则

本文目录:
1.1 httpd命令和apachectl命令
1.2 配置文件规则和常见指令
 1.2.1 Listen指令
 1.2.2 ServerRoot指令
 1.2.3 DocumentRoot指令
 1.2.4 DirectoryIndex指令
 1.2.5 ServerName和ServerAlias
 1.2.6 Include指令
 1.2.7 Define和UnDefine指令
 1.2.8 VirtualHost指令
 1.2.9 Options和AllowOverride指令
 1.2.10 Require指令
 1.2.11 长连接相关指令
1.3 容器类指令
 1.3.1 容器< Directory >和< Files >
 1.3.2 容器< Location >
 1.3.3 < IfDefine >、< IfModule >和< IfVersion >条件判断
 1.3.4 < If >、< ElseIf >和< Else >容器
1.4 配置文件的合并规则

httpd配置文件规则说明和一些基本指令,

本文目录:
1.1 httpd命令和apachectl命令
1.2 配置文件规则和常见指令
 1.2.1 Listen指令
 1.2.2 ServerRoot指令
 1.2.3 DocumentRoot指令
 1.2.4 DirectoryIndex指令
 1.2.5 ServerName和ServerAlias
 1.2.6 Include指令
 1.2.7 Define和UnDefine指令
 1.2.8 VirtualHost指令
 1.2.9 Options和AllowOverride指令
 1.2.10 Require指令
 1.2.11 长连接相关指令
1.3 容器类指令
 1.3.1 容器< Directory >和< Files >
 1.3.2 容器< Location >
 1.3.3 < IfDefine >、< IfModule >和< IfVersion >条件判断
 1.3.4 < If >、< ElseIf >和< Else >容器
1.4 配置文件的合并规则

本文主要介绍介绍的是httpd的配置文件,包括一些最基本的指令、配置规则、配置合并规则。以下指令完全来自官方手册以及我自己的总结和整理。


 

本文主要介绍介绍的是httpd的配置文件,包括一些最基本的指令、配置规则、配置合并规则。以下指令完全来自官方手册以及我自己的总结和整理。

本文主要介绍介绍的是httpd的配置文件,包括一些最基本的指令、配置规则、配置合并规则。以下指令完全来自官方手册以及我自己的总结和整理。

1.1 httpd命令和apachectl命令

[[email protected] ~]# httpd -h
Usage: httpd [-D name] [-d directory] [-f file]
             [-C "directive"] [-c "directive"]
             [-k start|restart|graceful|graceful-stop|stop]
             [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
  -D name            : 定义一个在< IfDefine name >中使用的name,以此容器中的指令
  -d directory       : 指定ServerRoot
  -f file            : 指定配置文件
  -C "directive"     : 指定在加载配置文件前要处理的指令(directive)
  -c "directive"     : 指定在加载配置文件后要处理的指令
  -e level           : 显示httpd启动时的日志调试级别
  -E file            : 将启动信息记录到指定文件中
  -v                 : 显示版本号
  -V                 : 显示编译配置选项
  -h                 : 显示帮助信息
  -l                 : 显示已编译但非动态编译的模块,即静态编译的模块
  -L                 : 显示静态模块可用的指令列表
  -t -D DUMP_VHOSTS  : 显示虚拟主机的设置信息
  -t -D DUMP_RUN_CFG : 显示运行参数
  -S                 : 等价于-t -D DUMP_VHOSTS -D DUMP_RUN_CFG。在调试如何解析配置文件时非常非常有用
  -t -D DUMP_MODULES : 显示所有已被加载的模块,包括静态和动态编译的模块
  -M                 : 等价于-t -D DUMP_MODULES
  -t                 : 检查配置文件语法
  -T                 : 不检查DocumentRoot,直接启动
  -X                 : 调试模式,此模式下httpd进程依赖于终端
  -k                 : 管理httpd进程,接受start|restart|graceful|graceful-stop|stop

apachectl命令和httpd命令基本相同。httpd接受的选项,apachectl都接受。但apachectl还可以省略"-k"选项直接管理httpd进程。

  • apachectl [-k] start:按照默认路径,读取默认配置文件,并启动httpd。
  • apachectl [-k] stop:关闭httpd进程。
  • apachectl [-k] restart:重启httpd进程。
  • apachectl [-k] graceful-stop:graceful stop,表示让已运行的httpd进程不再接受新请求,并给他们足够的时间处理当前正在处理的事情,处理完成后才退出。所以在进程退出前,日志文件暂时不会关闭,正在进行的连接暂时不会断开。
  • apachectl [-k] graceful:graceful restart,即graceful-stop start。
  • apachectl [-k] configtest:语法检查。

在systemd环境下,还可以使用apacectl statussystemctl status httpd查看httpd进程的详细信息。



1.2 配置文件规则和常见指令

httpd的核心体现在配置文件,各种功能都通过配置文件来实现。使用rpm包安装的httpd默认配置文件为/etc/httpd/conf/httpd.conf。可以使用httpd -f config_path指定要加载的配置文件。

配置文件中全是一些指令配置,每个指令都是某个模块提供的。以下是配置文件的一些规则:

 

 

1.2.1 Listen指令

设置监听套接字。设置方式很简单,包括以下几种情况:

# 监听两个端口
Listen 80
Listen 8000

# 监听套接字绑定在给定地址和端口上
Listen 192.170.2.1:80
Listen 192.170.2.5:8000

 

1.1 httpd命令和apachectl命令

[root@xuexi ~]# httpd -h
Usage: httpd [-D name] [-d directory] [-f file]
             [-C "directive"] [-c "directive"]
             [-k start|restart|graceful|graceful-stop|stop]
             [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
  -D name            : 定义一个在< IfDefine name >中使用的name,以此容器中的指令
  -d directory       : 指定ServerRoot
  -f file            : 指定配置文件
  -C "directive"     : 指定在加载配置文件前要处理的指令(directive)
  -c "directive"     : 指定在加载配置文件后要处理的指令
  -e level           : 显示httpd启动时的日志调试级别
  -E file            : 将启动信息记录到指定文件中
  -v                 : 显示版本号
  -V                 : 显示编译配置选项
  -h                 : 显示帮助信息
  -l                 : 显示已编译但非动态编译的模块,即静态编译的模块
  -L                 : 显示静态模块可用的指令列表
  -t -D DUMP_VHOSTS  : 显示虚拟主机的设置信息
  -t -D DUMP_RUN_CFG : 显示运行参数
  -S                 : 等价于-t -D DUMP_VHOSTS -D DUMP_RUN_CFG。在调试如何解析配置文件时非常非常有用
  -t -D DUMP_MODULES : 显示所有已被加载的模块,包括静态和动态编译的模块
  -M                 : 等价于-t -D DUMP_MODULES
  -t                 : 检查配置文件语法
  -T                 : 不检查DocumentRoot,直接启动
  -X                 : 调试模式,此模式下httpd进程依赖于终端
  -k                 : 管理httpd进程,接受start|restart|graceful|graceful-stop|stop

apachectl命令和httpd命令基本相同。httpd接受的选项,apachectl都接受。但apachectl还可以省略"-k"选项直接管理httpd进程。

  • apachectl [-k] start:按照默认路径,读取默认配置文件,并启动httpd。
  • apachectl [-k] stop:关闭httpd进程。
  • apachectl [-k] restart:重启httpd进程。
  • apachectl [-k] graceful-stop:graceful stop,表示让已运行的httpd进程不再接受新请求,并给他们足够的时间处理当前正在处理的事情,处理完成后才退出。所以在进程退出前,日志文件暂时不会关闭,正在进行的连接暂时不会断开。
  • apachectl [-k] graceful:graceful restart,即graceful-stop start。
  • apachectl [-k] configtest:语法检查。

在systemd环境下,还可以使用apacectl statussystemctl status httpd查看httpd进程的详细信息。

1.2.2 ServerRoot指令

该指令设置httpd的安装位置,也就是常称之为的basedir,在此目录下应该具有module、logs等目录。rpm安装的httpd的ServerRoot默认为/etc/httpd,编译安装的ServerRoot路径由"--prefix"选项指定,例如/usr/local/apache。

[root@xuexi ~]# ls -l /usr/local/apache/
total 52
drwxr-xr-x  2 root root  4096 Sep 27 20:46 bin
drwxr-xr-x  2 root root  4096 Sep 27 20:46 build
drwxr-xr-x  2 root root  4096 Sep 27 20:46 cgi-bin
drwxr-xr-x  3 root root  4096 Sep 27 20:46 error
drwxr-xr-x  2 root root  4096 Sep 30 11:33 htdocs
drwxr-xr-x  3 root root  4096 Sep 27 20:46 icons
drwxr-xr-x  2 root root  4096 Sep 27 20:46 include
drwxr-xr-x  2 root root  4096 Sep 30 01:40 logs
drwxr-xr-x  4 root root  4096 Sep 27 20:46 man
drwxr-xr-x 14 root root 12288 Jul  7 01:38 manual
drwxr-xr-x  2 root root  4096 Sep 27 20:46 modules

这个指令很关键,安装好apache后一般不会去做任何修改,因为很多指令的路径以及相对路径都是基于此路径的。严格地说,除了网络路径,基本上所有本地文件系统类的路径只要不是绝对路径,相对路径都基于此路径展开

例如,当指定"ServerRoot /usr/local/apache"时,下面几个指令中描述的本地路径,等号前面的采用的都是相对路径,等号右边的都是他们等价的绝对路径写法。

DocumentRoot "htdocs"                    = DocumentRoot "/usr/local/apache/htdocs"
LoadModule dir_module modules/mod_dir.so = LoadModule dir_module /usr/local/apache/modules/mod_dir.so
ErrorLog "logs/error_log"                = ErrorLog /usr/local/apache/logs/error_log
Alias /net_path local_fs_path            = Alias /net_path /usr/local/apache/local_fs_path
Include conf.d/vhost.conf                = Include /usr/local/apache/conf.d/vhost.conf

但注意,容器< Directory PATH >的PATH一般设置为文件系统的绝对路径,因为它是路径匹配性质的。但它仍可以使用相对路径时,此时它相对的是根文件系统的"/",而非ServerRoot。

所以,这个指令强烈不建议做任何修改,修改是很简单,但是牵一发而动全身。

1.1 httpd命令和apachectl命令

[root@xuexi ~]# httpd -h
Usage: httpd [-D name] [-d directory] [-f file]
             [-C "directive"] [-c "directive"]
             [-k start|restart|graceful|graceful-stop|stop]
             [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
  -D name            : 定义一个在< IfDefine name >中使用的name,以此容器中的指令
  -d directory       : 指定ServerRoot
  -f file            : 指定配置文件
  -C "directive"     : 指定在加载配置文件前要处理的指令(directive)
  -c "directive"     : 指定在加载配置文件后要处理的指令
  -e level           : 显示httpd启动时的日志调试级别
  -E file            : 将启动信息记录到指定文件中
  -v                 : 显示版本号
  -V                 : 显示编译配置选项
  -h                 : 显示帮助信息
  -l                 : 显示已编译但非动态编译的模块,即静态编译的模块
  -L                 : 显示静态模块可用的指令列表
  -t -D DUMP_VHOSTS  : 显示虚拟主机的设置信息
  -t -D DUMP_RUN_CFG : 显示运行参数
  -S                 : 等价于-t -D DUMP_VHOSTS -D DUMP_RUN_CFG。在调试如何解析配置文件时非常非常有用
  -t -D DUMP_MODULES : 显示所有已被加载的模块,包括静态和动态编译的模块
  -M                 : 等价于-t -D DUMP_MODULES
  -t                 : 检查配置文件语法
  -T                 : 不检查DocumentRoot,直接启动
  -X                 : 调试模式,此模式下httpd进程依赖于终端
  -k                 : 管理httpd进程,接受start|restart|graceful|graceful-stop|stop

apachectl命令和httpd命令基本相同。httpd接受的选项,apachectl都接受。但apachectl还可以省略"-k"选项直接管理httpd进程。

  • apachectl [-k] start:按照默认路径,读取默认配置文件,并启动httpd。
  • apachectl [-k] stop:关闭httpd进程。
  • apachectl [-k] restart:重启httpd进程。
  • apachectl [-k] graceful-stop:graceful stop,表示让已运行的httpd进程不再接受新请求,并给他们足够的时间处理当前正在处理的事情,处理完成后才退出。所以在进程退出前,日志文件暂时不会关闭,正在进行的连接暂时不会断开。
  • apachectl [-k] graceful:graceful restart,即graceful-stop start。
  • apachectl [-k] configtest:语法检查。

在systemd环境下,还可以使用apacectl statussystemctl status httpd查看httpd进程的详细信息。

 

1.2 配置文件规则和常见指令

httpd的核心体现在配置文件,各种功能都通过配置文件来实现。使用rpm包安装的httpd默认配置文件为/etc/httpd/conf/httpd.conf。可以使用httpd -f config_path指定要加载的配置文件。

配置文件中全是一些指令配置,每个指令都是某个模块提供的。以下是配置文件的一些规则:

  1. 指令生效方式是从上往下读取,这一点非常非常重要。很多指令的位置强烈建议不要改变,例如Include conf.d/*.conf指令建议不要移动位置。
  2. "#"开头的行为注释行,只能行头注释,不能行中注释。
  3. 对大小写不敏感,但是建议指令名称采用"驼峰式"命名。例如ServerRoot,DocumentRoot。
  4. 一行写不下的可以使用""续行,但是""后不能有任何字符,包括空格也不允许。
  5. 指令配置格式为"Directive value",例如"ServerRoot /etc/httpd",如果value中包含特殊字符或空格,则必须使用双引号包围。
  6. 由于可以通过Include指令包含其他配置文件,又支持各种路径的容器,所以在httpd启动时会先进行配置文件的合并。理解合并规则非常重要,具体见配置文件合并规则。

1.2.3 DocumentRoot指令

如果说,ServerRoot是httpd中本地文件相对路径的根,那么DocumentRoot就是网络路径相对路径的根。顾名思义,DocumentRoot是文档的根目录,这个文档的意思是展现在网络上的文档。使用rpm包安装的httpd的DocumentRoot默认值为"/var/www",编译安装的httpd,其DocumentRoot默认为"PREFIX/htdocs",也就是"$ServerRoot/htdocs"。

设置DocumentRoot后,将需要在网络上访问的文件都放进此目录下即可。

例如,假设httpd所在主机IP为192.168.100.14,DocumentRoot使用默认的/usr/local/apache/htdocs,那么下面几个URL中,左边的是浏览器中输入的值,右边的是其访问的服务器上的资源路径。

http://192.168.100.14/index.html         ==> /usr/local/apache/htdocs/index.html
http://192.168.100.14/index.php          ==> /usr/local/apache/htdocs/index.php
http://192.168.100.14/subdir/index.html  ==> /usr/local/apache/htdocs/subdir/index.html
http://192.168.100.14/subdir/index.php   ==> /usr/local/apache/htdocs/subdir/php

也就是说,DocumentRoot的值对应的是http://192.168.100.14/的"/"。

1.2 配置文件规则和常见指令

httpd的核心体现在配置文件,各种功能都通过配置文件来实现。使用rpm包安装的httpd默认配置文件为/etc/httpd/conf/httpd.conf。可以使用httpd -f config_path指定要加载的配置文件。

配置文件中全是一些指令配置,每个指令都是某个模块提供的。以下是配置文件的一些规则:

  1. 指令生效方式是从上往下读取,这一点非常非常重要。很多指令的位置强烈建议不要改变,例如Include conf.d/*.conf指令建议不要移动位置。
  2. "#"开头的行为注释行,只能行头注释,不能行中注释。
  3. 对大小写不敏感,但是建议指令名称采用"驼峰式"命名。例如ServerRoot,DocumentRoot。
  4. 一行写不下的可以使用""续行,但是""后不能有任何字符,包括空格也不允许。
  5. 指令配置格式为"Directive value",例如"ServerRoot /etc/httpd",如果value中包含特殊字符或空格,则必须使用双引号包围。
  6. 由于可以通过Include指令包含其他配置文件,又支持各种路径的容器,所以在httpd启动时会先进行配置文件的合并。理解合并规则非常重要,具体见配置文件合并规则。

 

1.2.1 Listen指令

设置监听套接字。设置方式很简单,包括以下几种情况:

# 监听两个端口
Listen 80
Listen 8000

# 监听套接字绑定在给定地址和端口上
Listen 192.170.2.1:80
Listen 192.170.2.5:8000

1.2.4 DirectoryIndex指令

该指令设置的是"当搜索的URL中的路径使用了"/"结尾时,httpd将搜索该指令所指定的文件响应给客户端"。也就是说,当url表示搜索的是目录时,将查找该目录下的DirectoryIndex。注意,很多时候如果没有给定尾部的"/",httpd的dir_module模块会自行加上"/",当然,是否补齐尾随的"/",也是可以控制的,见DirectorySlash指令。

DirectoryIndex的设置格式为:

DirectoryIndex disabled | local-url [local-url]

例如,当设置"DirectoryIndex index.html"时,如果在浏览器中输入下面左边的几个URL,httpd将响应右边对应的文件。

http://192.168.100.14           ==> $DocumentRoot/index.html
http://192.168.100.14/newdir/   ==> $DocumentRoot/newdir/index.html

可以指定多个index文件,它们将按顺序从左向右依次查找,并返回第一个找到的index文件。例如:

<IfModule dir_module>
    DirectoryIndex index.php index.html /mydir/index.html
</IfModule>

当浏览器中输入http://192.168.100.14/时,将首先搜索index.php,如果该文件不存在,则再搜索index.html,如果还找不到,则再找该目录的子目录下的文件/mydir/index.html。但这不表示http://192.168.100.14/mydir/会搜索/mydir/index.html。

可以使用多个DirectoryIndex指令进行追加设置,它等价于单行设置多个值,例如下面的设置等价于DirectoryIndex index.php index.html

DirecotryIndex index.php
DirectoryIndex index.html

如果要替换某个值,则直接修改或使用disabled关键字禁用其前面的Directoryindex。例如禁用index.php,只提供index.html的索引。

DirectoryIndex index.php
DirectoryIndex disabled
DirectoryIndex index.html

但注意,"disabled"关键字必须独自占用一个DirectoryIndex指令,否则它将被解析成字面意思,也就是说将其当作一个index文件响应给客户端。

DirectoryIndex指令可以设置在Server、Virtual host、Location和Directory上下文。所以,当设置在location或Directory容器中时,它将覆盖全局设置。例如,当DocumentRoot为/usr/local/apache/htdocs时:

DirectoryIndex index.php
<directory /usr/local/apache/htdocs/newdir>
    DirectoryIndex index.html
</directory>
# 或者
<location /newdir>
    DirectoryIndex index.html
</location>

在输入http://IP/newdir/时,将提供index.html而非index.php。

当DirectoryIndex提供的索引文件都不存在时,将根据Options中的Indexes选项设置决定是否列出文件列表,除非是提供文件下载,否则出于安全考虑,这个选项是强烈建议关闭的。例如以下设置为打开,当

<directory /usr/local/apache/htdocs/newdir>
    Options Indexes
    DirectoryIndex index.html
</directory>

1.2.1 Listen指令

设置监听套接字。设置方式很简单,包括以下几种情况:

# 监听两个端口
Listen 80
Listen 8000

# 监听套接字绑定在给定地址和端口上
Listen 192.170.2.1:80
Listen 192.170.2.5:8000

 

1.2.2 ServerRoot指令

该指令设置httpd的安装位置,也就是常称之为的basedir,在此目录下应该具有module、logs等目录。rpm安装的httpd的ServerRoot默认为/etc/httpd,编译安装的ServerRoot路径由"--prefix"选项指定,例如/usr/local/apache。

[root@xuexi ~]# ls -l /usr/local/apache/
total 52
drwxr-xr-x  2 root root  4096 Sep 27 20:46 bin
drwxr-xr-x  2 root root  4096 Sep 27 20:46 build
drwxr-xr-x  2 root root  4096 Sep 27 20:46 cgi-bin
drwxr-xr-x  3 root root  4096 Sep 27 20:46 error
drwxr-xr-x  2 root root  4096 Sep 30 11:33 htdocs
drwxr-xr-x  3 root root  4096 Sep 27 20:46 icons
drwxr-xr-x  2 root root  4096 Sep 27 20:46 include
drwxr-xr-x  2 root root  4096 Sep 30 01:40 logs
drwxr-xr-x  4 root root  4096 Sep 27 20:46 man
drwxr-xr-x 14 root root 12288 Jul  7 01:38 manual
drwxr-xr-x  2 root root  4096 Sep 27 20:46 modules

这个指令很关键,安装好apache后一般不会去做任何修改,因为很多指令的路径以及相对路径都是基于此路径的。严格地说,除了网络路径,基本上所有本地文件系统类的路径只要不是绝对路径,相对路径都基于此路径展开

例如,当指定"ServerRoot /usr/local/apache"时,下面几个指令中描述的本地路径,等号前面的采用的都是相对路径,等号右边的都是他们等价的绝对路径写法。

DocumentRoot "htdocs"                    = DocumentRoot "/usr/local/apache/htdocs"
LoadModule dir_module modules/mod_dir.so = LoadModule dir_module /usr/local/apache/modules/mod_dir.so
ErrorLog "logs/error_log"                = ErrorLog /usr/local/apache/logs/error_log
Alias /net_path local_fs_path            = Alias /net_path /usr/local/apache/local_fs_path
Include conf.d/vhost.conf                = Include /usr/local/apache/conf.d/vhost.conf

但注意,容器< Directory PATH >的PATH一般设置为文件系统的绝对路径,因为它是路径匹配性质的。但它仍可以使用相对路径时,此时它相对的是根文件系统的"/",而非ServerRoot。

所以,这个指令强烈不建议做任何修改,修改是很简单,但是牵一发而动全身。

1.2.5 ServerName和ServerAlias

ServerName用于唯一标识提供web服务的主机名,只有在基于名称的虚拟主机中该指令才是必须提供的。也就是说,如果不是在基于名称的虚拟主机中,可以任意指定该指令的值,只要你认为它能唯一标识你的主机。但如果不设置该指令,那么httpd在启动时,将会反解操作系统的IP地址。

唯一标识主机的方式,也即ServerName的语法为:

ServerName {domain-name|ip-address}[:port]

例如,在主机web.longshuai.com上提供了一个httpd web服务,如果还想使用www.longshuai.com提供同样的服务,还想效率更高点,则在设置DNS别名后再配置:

ServerName www.longshuai.com

ServerAlias用于定义ServerName的别名。如果在定义ServerName之后再定义ServerAlias,那么ServerName和ServerName没有任何区别。当然,为了区分基于名称的虚拟主机,还是必须要定义ServerName。

例如,下面几个ServerName和ServerAlias是完全等价的。

<VirtualHost *:80>
  ServerName  server.example.com
  ServerAlias server server2.example.com server2
  ServerAlias *.example.com
  # ...
</VirtualHost>

1.2.2 ServerRoot指令

该指令设置httpd的安装位置,也就是常称之为的basedir,在此目录下应该具有module、logs等目录。rpm安装的httpd的ServerRoot默认为/etc/httpd,编译安装的ServerRoot路径由"--prefix"选项指定,例如/usr/local/apache。

[root@xuexi ~]# ls -l /usr/local/apache/
total 52
drwxr-xr-x  2 root root  4096 Sep 27 20:46 bin
drwxr-xr-x  2 root root  4096 Sep 27 20:46 build
drwxr-xr-x  2 root root  4096 Sep 27 20:46 cgi-bin
drwxr-xr-x  3 root root  4096 Sep 27 20:46 error
drwxr-xr-x  2 root root  4096 Sep 30 11:33 htdocs
drwxr-xr-x  3 root root  4096 Sep 27 20:46 icons
drwxr-xr-x  2 root root  4096 Sep 27 20:46 include
drwxr-xr-x  2 root root  4096 Sep 30 01:40 logs
drwxr-xr-x  4 root root  4096 Sep 27 20:46 man
drwxr-xr-x 14 root root 12288 Jul  7 01:38 manual
drwxr-xr-x  2 root root  4096 Sep 27 20:46 modules

这个指令很关键,安装好apache后一般不会去做任何修改,因为很多指令的路径以及相对路径都是基于此路径的。严格地说,除了网络路径,基本上所有本地文件系统类的路径只要不是绝对路径,相对路径都基于此路径展开

例如,当指定"ServerRoot /usr/local/apache"时,下面几个指令中描述的本地路径,等号前面的采用的都是相对路径,等号右边的都是他们等价的绝对路径写法。

DocumentRoot "htdocs"                    = DocumentRoot "/usr/local/apache/htdocs"
LoadModule dir_module modules/mod_dir.so = LoadModule dir_module /usr/local/apache/modules/mod_dir.so
ErrorLog "logs/error_log"                = ErrorLog /usr/local/apache/logs/error_log
Alias /net_path local_fs_path            = Alias /net_path /usr/local/apache/local_fs_path
Include conf.d/vhost.conf                = Include /usr/local/apache/conf.d/vhost.conf

但注意,容器< Directory PATH >的PATH一般设置为文件系统的绝对路径,因为它是路径匹配性质的。但它仍可以使用相对路径时,此时它相对的是根文件系统的"/",而非ServerRoot。

所以,这个指令强烈不建议做任何修改,修改是很简单,但是牵一发而动全身。

 

1.2.3 DocumentRoot指令

如果说,ServerRoot是httpd中本地文件相对路径的根,那么DocumentRoot就是网络路径相对路径的根。顾名思义,DocumentRoot是文档的根目录,这个文档的意思是展现在网络上的文档。使用rpm包安装的httpd的DocumentRoot默认值为"/var/www",编译安装的httpd,其DocumentRoot默认为"PREFIX/htdocs",也就是"$ServerRoot/htdocs"。

设置DocumentRoot后,将需要在网络上访问的文件都放进此目录下即可。

例如,假设httpd所在主机IP为192.168.100.14,DocumentRoot使用默认的/usr/local/apache/htdocs,那么下面几个URL中,左边的是浏览器中输入的值,右边的是其访问的服务器上的资源路径。

http://192.168.100.14/index.html         ==> /usr/local/apache/htdocs/index.html
http://192.168.100.14/index.php          ==> /usr/local/apache/htdocs/index.php
http://192.168.100.14/subdir/index.html  ==> /usr/local/apache/htdocs/subdir/index.html
http://192.168.100.14/subdir/index.php   ==> /usr/local/apache/htdocs/subdir/php

也就是说,DocumentRoot的值对应的是http://192.168.100.14/的"/"。

1.2.6 Include指令

在httpd启动时,首先会解析配置文件。httpd支持include指令来包含其他文件,在解析配置文件时会进行配置合并。

支持通配符"*"、"?"和"[]",但它们不能匹配斜线"/",如有必要,它们会按照文件名的字母顺序依次进行加载。如果include指令中指定包含一个目录,则会按照字母顺序加载该目录内的所有文件,这比较容易出错,因为有些时候会产生一些临时文件或非配置类的文件。

例如:

Include /usr/local/apache/conf/ssl.conf
Include /usr/local/apache/conf/vhosts/*.conf

可以使用绝对路径,也可以使用相对路径,如果使用相对路径,则它相对于ServerRoot。

Include conf/ssl.conf
Include conf/vhosts/*.conf

如果include包含的文件不存在时,将报错。这时可以使用IncludeOptional指令进行加载,这表示存在则加载,不存在就算了。例如下面的第一条指令中,如果vhosts下没有子目录,或者子目录中没有".conf"文件都将失败,而第二条指令则不会。

Include conf/vhosts/*/*.conf
IncludeOptional conf/vhosts/*/*.conf

1.2.3 DocumentRoot指令

如果说,ServerRoot是httpd中本地文件相对路径的根,那么DocumentRoot就是网络路径相对路径的根。顾名思义,DocumentRoot是文档的根目录,这个文档的意思是展现在网络上的文档。使用rpm包安装的httpd的DocumentRoot默认值为"/var/www",编译安装的httpd,其DocumentRoot默认为"PREFIX/htdocs",也就是"$ServerRoot/htdocs"。

设置DocumentRoot后,将需要在网络上访问的文件都放进此目录下即可。

例如,假设httpd所在主机IP为192.168.100.14,DocumentRoot使用默认的/usr/local/apache/htdocs,那么下面几个URL中,左边的是浏览器中输入的值,右边的是其访问的服务器上的资源路径。

http://192.168.100.14/index.html         ==> /usr/local/apache/htdocs/index.html
http://192.168.100.14/index.php          ==> /usr/local/apache/htdocs/index.php
http://192.168.100.14/subdir/index.html  ==> /usr/local/apache/htdocs/subdir/index.html
http://192.168.100.14/subdir/index.php   ==> /usr/local/apache/htdocs/subdir/php

也就是说,DocumentRoot的值对应的是http://192.168.100.14/的"/"。

 

1.2.4 DirectoryIndex指令

该指令设置的是"当搜索的URL中的路径使用了"/"结尾时,httpd将搜索该指令所指定的文件响应给客户端"。也就是说,当url表示搜索的是目录时,将查找该目录下的DirectoryIndex。注意,很多时候如果没有给定尾部的"/",httpd的dir_module模块会自行加上"/",当然,是否补齐尾随的"/",也是可以控制的,见DirectorySlash指令。

DirectoryIndex的设置格式为:

DirectoryIndex disabled | local-url [local-url]

例如,当设置"DirectoryIndex index.html"时,如果在浏览器中输入下面左边的几个URL,httpd将响应右边对应的文件。

http://192.168.100.14           ==> $DocumentRoot/index.html
http://192.168.100.14/newdir/   ==> $DocumentRoot/newdir/index.html

可以指定多个index文件,它们将按顺序从左向右依次查找,并返回第一个找到的index文件。例如:

<IfModule dir_module>
    DirectoryIndex index.php index.html /mydir/index.html
</IfModule>

当浏览器中输入http://192.168.100.14/时,将首先搜索index.php,如果该文件不存在,则再搜索index.html,如果还找不到,则再找该目录的子目录下的文件/mydir/index.html。但这不表示http://192.168.100.14/mydir/会搜索/mydir/index.html。

可以使用多个DirectoryIndex指令进行追加设置,它等价于单行设置多个值,例如下面的设置等价于DirectoryIndex index.php index.html

DirecotryIndex index.php
DirectoryIndex index.html

如果要替换某个值,则直接修改或使用disabled关键字禁用其前面的Directoryindex。例如禁用index.php,只提供index.html的索引。

DirectoryIndex index.php
DirectoryIndex disabled
DirectoryIndex index.html

但注意,"disabled"关键字必须独自占用一个DirectoryIndex指令,否则它将被解析成字面意思,也就是说将其当作一个index文件响应给客户端。

DirectoryIndex指令可以设置在Server、Virtual host、Location和Directory上下文。所以,当设置在location或Directory容器中时,它将覆盖全局设置。例如,当DocumentRoot为/usr/local/apache/htdocs时:

DirectoryIndex index.php
<directory /usr/local/apache/htdocs/newdir>
    DirectoryIndex index.html
</directory>
# 或者
<location /newdir>
    DirectoryIndex index.html
</location>

在输入http://IP/newdir/时,将提供index.html而非index.php。

当DirectoryIndex提供的索引文件都不存在时,将根据Options中的Indexes选项设置决定是否列出文件列表,除非是提供文件下载,否则出于安全考虑,这个选项是强烈建议关闭的。例如以下设置为打开,当

<directory /usr/local/apache/htdocs/newdir>
    Options Indexes
    DirectoryIndex index.html
</directory>

1.2.7 Define和UnDefine指令

该指令用于定义参数或定义向后全局生效的变量。语法格式为:

Define param [value]

当只给定一个param时,表示定义一个参数,这个参数用于< IfDefine param >容器进行判断,只有定义了的参数param,该容器才返回真,其内封装的指令才生效。它的等价行为是在httpd启动时(必须是启动时),使用"-D"选项定义参数。例如下面两个方法是等价的:

# startup command
shell> httpd -DMyName ......
# in config 
Define MyName

当给定了两个参数,即还指定了value时,将表示定义一个变量,该变量具有向后全局性。也就是说,定义在某个虚拟主机中的变量在后面的另一个虚拟主机中也有效。引用变量时,使用${var}的方式。注意,变量名中不能包含冒号":"。

例如:

<IfDefine !TEST>
  Define servername www.example.com
</IfDefine>

DocumentRoot "/var/www/${servername}/htdocs"

使用UnDefine指令则是取消Define定义的参数或变量。语法为UnDefine param

本文由澳门皇冠金沙网站发布于网络操作,转载请注明出处:httpd配置文件规则说明和一些基本指令,conf规则