apache配置文件分为三部分,分别是全局配置,中心主机配置和虚拟主机配置。


1.全局配置

ServerTokens OS 是否显示操作系统的信息

  配置格式有如下几种方式:

apache配置文件详解_配置文件

ServerRoot 服务器起点的安装目录

PidFile PID的文件,这是相对路径,并链接到/var/run目录

Timeout 120 TCP的超时时间,发送的数据包如果没有响应,到了设置时间后就自动断开 TCP的机制

KeepAlive 保持连接

MaxKeepAliveRequests 100 最多请求的数据包数

KeepAliveTimeout 15保持的超时时间

下面是设置Apache的两种工作模式,分别是prefork和worker。我们先来了解一下这两种工作模式。

prefork采用预派生子进程方式,用单独的子进程来处理 不同的请求,进程之间彼此独立。它适合于没有线程安全    库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的MPM,这样若一个请求出现问题就不会影响到其他请求。

worker全新的支持多线程和多进程混合模型的MPM。由于 使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。

<IfModule prefork.c>

StartServers       8              启动服务的时候启动几个空闲进程等待用户访问

MinSpareServers    5          最少空闲进程

MaxSpareServers   20        最大空闲进程

ServerLimit      256           定义客户端数的超出上限

MaxClients       256           最大客户端(进程)数(一个客户端可发多个请求)

MaxRequestsPerChild  4000     定义一个进程最多可以响应多少个请求

</IfModule>  

 

<IfModule worker.c>

StartServers         2       启动服务的时候启动几个空闲进程等待用户访问

MaxClients         150       最大客户端数

MinSpareThreads     25       最少空闲线程

MaxSpareThreads     75       最大空闲线程

ThreadsPerChild     25       每个进程最多可以生产的线程数量

MaxRequestsPerChild  0       每个子进程可以响应多少个请求 0表示不作限制

</IfModule>


Listen 80 监听的端口,nginx可以监听多个端口,也可以监听某个特定IP的端口。

(Listen 8080)

(Listent 192.168.1.2:80)

[注]设置端口后要重启httpd服务才生效。


LoadModule                  指明加载某些模块

Include conf.d/*.conf   被识别为配置文件的一部分

ExtendedStatus On        当使用stubstatus查看时显示更为完整的状态信息

User apache

Group apache               指定运行这个服务的用户和组

  

2.中心主机配置

ServerAdmin root@localhost 服务器不响应或者报错时候显示的管理员的邮箱地址

ServerName www.example.com:80 自动探测本机的正向和反向地址

UseCanonicalName Off 是否使用正式名称

DocumentRoot "/var/www/html" 指定网页文件的存放位置

[注]中心主机和虚拟主机不能同时使用,当使用虚拟主机时,要把中心主机的DocumentRoot注释掉。


<Directory /> 定义一个目录的访问属性

   Options FollowSymLinks

   AllowOverride None

</Directory>

options参数:

Indexes:允许索引访问网站没有主页面的时候直接列出网站目录下的所有内容                FollowSymLinks:跟踪链接允许访问符号链接所指向的实际文件

Includes:允许执行服务器包含的这样方式的调用

SymLinksifOwnerMatch:允许使用符号链接如果属主匹配的话先做用户匹配

ExecCGI:允许执行CGI

MultiViews:多用户的试图服务器和客户端的内容协商


Order allow,deny 访问目录的访问控制列表

Allow from all

在这里,oreder表示顺序,后者是默认规则,这是基于客户端来源的ACL。

例:允许192.168网段的IP地址进行访问,但不允许192.168.0.1的IP进行访问。

Order allow,deny

Deny from 192.168.0.1

Allow from 192.168.0.0/24


AllowOverride 是否允许覆盖当用户访问这个目录中的文件的访问控制列表,后面的是默认规则

规则:None 全部不允许

      All  全部可以覆盖

     FileInfo 

            AuthConfig 以指定的认证方式为准

            Limit

例:只能允许有权限的用户进行访问。我们先创建一个文件.htpasswd,该文件中写着用户名和密码。

创建.htpasswd文件命令

htpasswd -c 只在第一次用,创建密码文件的指令(如果文件创建以后还使用-c参数,原文件将被覆盖)

        -m 密码用md5加密后使用

        -D 删除用户

我们先在该文件中添加gentoo用户,再添加centos用户。

htpasswd -cm  /etc/httpd/conf/.htpasswd gentoo(输入命令后会提示输入密码)

htpasswd-m  /etc/httpd/conf/.htpasswd centos

创建好密码文件后,我们来设置AllowOverride

AllowOverride AuthConfig认证配置

AuthName "private" 认证名称(名称可以随便填写)

AuthType Basic    认证类型

AuthUserFile /etc/httpd/conf/.htpasswd 虚拟账号访问apache才用到的,这是用户的认证文件

AuthgroupFile /etc/httpd/conf/.htgroup 组的账号文件

Require user gentoo 只允许gentoo用户访问 

Require valid-user 允许所有密码文件中的用户访问

#Require group developers 只允许这个组的用户登录

[注]这是还可以设置某个组中的用户进行访问,但需要注意的是,在设置组时,需要同时创建htpasswd和htgroup。htgroup文件中包含组中的用户,htpasswd文件中包含组中那些用户的用户名和密码。

htgroup文件的创建及其格式

vim /etc/httpd/conf/.htgroup

development: gentoo ubuntu 

格式为:组名:用户 用户 ...

 

<IfModule mod_userdir.c>操作系统用户拥有自己的网站

Jerry: http://172.16.25.1/~jerry

</IfModule>

在家目录下创建publick_html目录,在此目录下创建网页文件。

这样不用操作系统用户可以访问不同的页面。

使用这项功能时,需注释掉UserDir disable启用UserDir public_html

同时要让Apache对该用户的家目录有执行权限,例chown o+x /home/jerry


DirectoryIndex index.html index.html.var 网站的默认主页


AccessFileName .htaccess 为每一个目录创建访问控制权限

控制哪个文件,就在该文件所在的那个目录下建立.htaccess文件实现对特定目录的访问控制

<Direcotry "/www/html/bbs">定义在主配置文件中

       optionsnone

       Allowoverrideauthconfig

       AuthName

       AuthType

       AuthUserFile

       Requireuser

</Directory>


TypesConfig /etc/mime.types 定义当前系统所支持的mime的类型


DefaultType text/plain 默认的类型


<IfModule mod_mime_magic.c> 判断某个模块是否存在

#  MIMEMagicFile /usr/share/magic.mime

   MIMEMagicFile conf/magic

</IfModule>


HostnameLookups Off 是否对某个主机的主机名做析 一般不用


EnableMMAP off

EnableSendfileoff 

ErrorLog logs/error_log 错误日志相对于serverroot而言


LogLevel warn 错误日志的日志级别

级别:

Debug 调试级别日志信息详细

Info

Notice 引起注意

warn   警告

Crit   蓝色预警

Alert  ×××预警

Emerg  红色警戒


日志格式:

LogFormat "%h %l %u %t\"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t\"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U"referer

LogFormat "%{User-agent}i" agent

%h 远端主机的IP地址  %l 远程用户的登录名称 %u用户名 %t访问时间 %r 请求数据包首部的第一行%>s  状态码 %b 响应信息的大小(字节)\"%{Referer}i\" 引用从哪跳转至当面页面 \"%{User-Agent}i\用户代理(浏览器,从哪发起的浏览请求,搜索引擎的网络爬虫)


CustomLog logs/access_log combined 访问日志


ServerSignature On 服务器签署,页面的底部信息


Alias /icons/"/var/www/icons/"  路径别名,实现不在网页指定路径下的页面的访问

ScriptAlias /cgi-bin/"/var/www/cgi-bin/" 哪个路径下可放置CGI脚本


IndexOptions FancyIndexing VersionSort NameWidth=*HTMLTable 索引的选项


AddIconByType添加图标


AddDefaultCharset UTF-8默认使用的字符集

 

AddType application/x-compress .Z 添加额外的mime类型

AddType application/x-gzip .gz .tgz

BrowserMatch 匹配浏览器类型

DirectoryIndex index.html index.html.var指定主页


3.虚拟主机

一个物理主机可以运行N个站点,将其实现需设置虚拟主机。值得注意的是,虚拟主机和中心主机不能同时使用。

虚拟主机可通过IP,Port和FQDN进行设置。


IP

<VirtualHost 172.16.100.1:80>

   ServerName www.magedu.com

DocumentRoot "/vhosts/magedu.com" 网页路径

 </VirtualHost>

<VirtualHost 172.16.100.2:80>

   ServerName www.linux.org

DocumentRoot "/vhosts/linux.org" 

 </VirtualHost>


Port

<VirtualHost 172.16.100.1:80>

   ServerName www.magedu.com

DocumentRoot "/vhosts/magedu.com" 网页路径

 </VirtualHost>

<VirtualHost 172.16.100.1:8080>

   ServerName www.linux.org

DocumentRoot "/vhosts/linux.org" 

 </VirtualHost>


FQDN

NameVirtualHost 172.168.100.1:80

<VirtualHost 172.16.100.1:80>

   ServerName www.magedu.com

DocumentRoot "/vhosts/magedu.com" 网页路径

 </VirtualHost>

<VirtualHost 172.16.100.1:80>

   ServerName www.linux.org

DocumentRoot "/vhosts/linux.org" 

 </VirtualHost>

[注]如果用户使用IP地址来访问基于FQDN的虚拟主机,那么将访问到第一个虚拟主机。

    由于在访问之前,DNS会将网址解析为IP地址,为何还可以创建基于FQDN的虚拟主机。这是因为在       TCP头部有网址信息,这时会根据这个头部信息来进行判断。


以下是配置虚拟主机的通用格式,在虚拟主机中也可以加入directory和location容器,错误日志及其他内容。

<VirtualHost 172.16.100.1:80>

DocumentRoot "/path/to/somewhere" 网页路径

ServerName www.magedu.com

<Dircetory "/path/to/somewhere"> 访问控制

   Options Indexes

   AllowOverride none

   Order allow,deny

   Allow from 172.16

</Directory>

ErrorLog /var/log/httpd/www.magedu.com_error_log

CustomLog /var/log/httpd/www.magedu.com_access_log combined

ServerAdmin linuxedu@formail.com

Alias

Scriptalias

 </VirtualHost>


下面介绍Apache的三个容器:

1.<Directory “/vhosts/magedu”>本地文件系统的访问路径

</Directory>

 

2.<Location URL> 基于URL的访问属性

</Location>

例:手册页只能被172.16网段访问

<Location /manual>

  Order allow,deny

  Allow 172.16.0.0/16

</Location>


如果Location定义的目录在Directory定义的目录之下,如:

<Directory “/var/www/manual”>

  Orderallow,deny

  Allowfrom 192.168.0.0/24

</Directory>

 

<Location /manual>

  Order allow,deny

  Allow 172.16.0.0/16

</Location>

那么,Location的生效次序在Directory之后。


可使用正则表达式,~表示后面使用的是正则表达式

<Location ~ "/p_w_picpaths?"> ?匹配任意单个字符

  Order allow,deny

  Allow 172.16.0.0/16

</Location>

 

<LocationMatch "/p_w_picpaths?"> 明确说明使用正则表达式

  Order allow,deny

  Allow 172.16.0.0/16

</LocationMatch>


3.<Files>对某些特定文件进行访问控制(基于文件名及正则表达式通配)

</Files>

<Files ~>或者<FilesMatch>

 

优先级:Directory-->Files-->Location(-->)


限定方法:

可以使用<limit>与</limit>之间限定所使用的方法,这些方法包括GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,CONNECTION。

例如,限定gentoo用户使用put和post方法。

<Limit PUT POST>

 Require user gentoo

</Limit>


在Apache中使用CGI

在服务器端先执行脚本,然后再进行显示。

ScriptsAlias 明确定义在哪个路径下可以执行的脚本

ScriptsAlias /cgi-bin/ “/var/www/cgi-bin/”

Cd /var/www/cgi-bin

Vim test.sh

#!/bin/bash

#

Cat << EOF

Content-type: text/html

<pre>

<h1> `date`</h1>

</pre>

EOF

<pre></pre>之间写入脚本,脚本要用反引号引起来,或$()