绑定地址与端口
启动apache2
调用命令apache2ctl来启动,而非apache2。它可以简单地用start、stop、restart等参数,也可以使用和apahce2一样的参数。在
/etc/init.d/apache2
所以只用调用:
安装apache2服务器:sudo apt-get install apache2
开启服务器:sudo /etc/init.d/apache2 start
关闭服务器:sudo /etc/init.d/apache2 stop
重启服务器:sudo /etc/init.d/apache2 restart
脚本里,也是调用的apahce2ctl。
总览
在文件/etc/apache2/ports.conf里可以看到这行:
Listen 80
它表示监听服务器所有网卡的80端口。
我们也可以在不同网卡上监听不同端口:
Listen 192.0.2.1:80
Listen 192.0.2.5:8000
IPv6
如果要监听IPv6,需要在地址周围使用方括号:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
为了用最少的socket来同时处理IPv4和IPv6请求,则需要使用IPv4映射的IPv6地址。--enable-v4-mapped配置选项用于启动这个映射。默认情况下,除了FreeBSD, NetBSD, and OpenBSD,其它平台都默认启用这个选项。
如果只想处理IPv4请求,则在所有的Listen指令上都指定一个IPv4地址:
Listen 0.0.0.0:80
Listen 192.0.2.1:80
协议
Listen有一个可选的protocol参数。在未指定的情况下,https的默认端口为443,而http为其它的端口。这个protocol用来决定哪个模块来处理请求,以及使用AcceptFilter来应用协议相关的优化。
我们只有在响应非标准的端口上时,才需要指定protocol参数。比如:
Listen 192.170.2.1:8443 https
与虚拟主机的协作
Listen指令并不实现Virtual Host,它仅仅告诉主服务器监听哪些地址以及哪些端口,如果没有使用<VirtualHost>指令,服务器会以相同的方式处理所有接受到的请求。<VirtualHost>指令可以为一个或多个地址或端口指定不同的行为。要使用VirtualHost,服务器必须先监听使用的地址和端口,否则<VirtualHost>不能被访问。
配置文件
主要配置文件
Apache通过在文本配置文件里放置指令来配置HTTP服务器。主配置文件通常为httpd.conf(apache2为/etc/apache2/apache2.conf,它会包含httpd.conf),该文件的位置在编译期中设置,也可以使用命令行参数-f来重写。此外,其它配置文件可以通过Include指令来引用,这里可以使用通配符来引用多个配置文件(比如厅Include mods-enabled/*.conf)。httpd在启动或重启时会加载主要配置文件。
服务器也读取一个包含mime文档类型的文件,文件名通过TypeConfig指令来指定。默认情况下为mime.types。
语法
配置文件里通过一个指令为一行。在行末用“\”可以标示指令占据多行。
指令本身是不区分大小写的,但它的参数通常是大小写敏感的。以#开头的行被视为注释。空白行和指令前的空格都被忽略。
Define定义的变量和shell环境变量可以通过${VAR}的形式在配置文件里使用。通过Define定义的变量比环境变量的优先级高。如果VAR没有定义,那么${VAR}会保持不变,而且一个警告会发生。变量名不能包含“:”,以免干扰RewriteMap指令。
只有在服务器启动前定义的环境变量才会被展开。在配置文件本身定义的环境变量,如通过SetEnv定义的,不会展开。
配置文件在展开变量、联合后续行(\结尾表示)后的最大长度大约为16M。.htaccess文件里行的最大长度为8190个字符。
使用命令apachectl configtest或apachectl -t可以在不启动服务器的情况下检查配置文件语法错误。
mod_info模块的-DUMP-CONFIG可以输出解析所有引用文件和环境变量,以及删除注释、不匹配的<IfDefine>和<IfModule>的配置文件。
模块
核心服务器只包含了最基本的功能,扩展特性可以通过加载模块来使用。默认情况下,一个模块的基本集在编译期包含进了服务器。如果服务器被编译成使用动态加载模块,那么模块可以分开编译,并在任何时候使用LoadModule指令加入。否则,服务器必须重新编译来加入或删除模块。<IfModule>块里的指令只在所需模块被加载时才会执行,比如:
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
命令行参数-l可以查看编译进server的模块,-M可以查看动态加载的模块。