一、虚拟主机配置文件参数
以企业实际生产环境为例,以下是一台虚拟主机配置代码
<VirtualHost *:80>
ServerAdmin wgkgood@163.com
DocumentRoot "/data/webapps/www1" #设置发布目录
ServerName www.wugk1.com #设置域名
<Directory "/data/webapps/www1"> #对发布目录设置权限
AllowOverride All #具有 “.htaccess” 作用域将生效.加载这些文件,里面设置一些规则如跳转等
Options -Indexes FollowSymLinks #禁止显示目录结构,必须以html方式解析
Order allow,deny # 默认情况下禁止所有客户机访问
Allow from all #允许所有客户机访问
</Directory>
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
参数详解
使用<Directory>… </Directory>设置指定目录的访问权限,其中可包含:
- Options
- AllowOverride
- Order
- Allow
- Deny
如上五个属性,在后面可以跟如下参数设置:
- AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。指令设置为 All 时,所有具有 “.htaccess” 作用域将生效.
- Options -Indexes FollowSymLinks禁止显示目录,如果要以目录显示需要改成Options Indexes FollowSymLinks,一般作为资源下载站会以目录结构显示.一般网站禁止浏览防止代码被下载.
- Order allow,deny ,默认情况下禁止所有客户机访问;Order deny,allow 默认情况下允许所有客户机访问.
- Allow from all允许所有客户机访问
二、apache常用文件说明(以yum安装为例,源码安装则在对应的安装目录下)
- /etc/httpd/conf/httpd.conf (Apache的主配文件)
httpd.conf是Apache的主配文件,整个Apache也不过就是这个配置文件,里面几乎包含了所有的配置。有的distribution都将这个文件拆分成数个小文件分别管理不同的参数。但是主要配置文件还是以这个文件为主。只要找到这个文件名就知道如何设置了。后面会详细解释Apache主配文件的每一行配置 - /etc/httpd/conf.d/*.conf(include文件,引用文件)
如果你不想要修改原始配置文件httpd.conf的话,那么可以将你自己的额外参数文件独立出来,注意以.conf结尾放在/etc/httpd/conf.d/目录下。重启Apache的时候,这个配置文件就会被读入主配文件之中了。他的好处就是当你在进行系统升级的时候,几乎不需要改动原本的配置文件,只要将你自己的额外参数文件复制到正确的地点即可,维护起来非常方便。 - /usr/lib64/httpd/modules/
/etc/httpd/modules/
Apache支持很多的外挂模块,例如PHP以及SSL都是Apache外挂的一种。所有你想要使用的模块文件默认是放置在这个目录当中的。 - /var/www/html/ ( (网站根目录,发布目录)
这个目录就是Apache默认的存放首页的目录(默认是索引页面index.html) - /var/www/error/
当因为服务器设置错误,或是浏览器要求的数据错误时,在浏览器上出现的错误信息就以这个目录的默认信息为主 - /var/www/icons/
这个目录提供Apache默认给予的一些小图示,可以随意使用。 - /var/www/cgi-bin/
默认给一些可执行的CGI(网页程序)程序放置的目录。 - /var/log/httpd/
默认的Apache日志文件都放在这里,对于流量比较大的网站来说,这个目录要格外注意,这里的数据文件可能会非常大。 - /usr/sbin/apachectl
这个就是Apache的主要执行文件,这个执行文件其实就是一个Shell Script而已,他可以主动地侦测系统上面的一些设置值,好让你启动Apache时更简单一些。 - /usr/sbin/httpd
这个是主要的Apache二进制执行文件。 - /usr/bin/htpasswd ( (Apache密码保护)
在当你想要登入某些网页时你需要输入帐号与密码,那Apache本身就提供一个最基本的密码保护方式,该密码的产生就是通过这个命令来实现的。
三、apache工作模式
一般来说常用的apache服务器有两种工作模式prefork
和worker
两种,源码包预编译的时候参数--with-mpm=MPM
就是选择安装引擎的工作模式MPM={beos|event|worker|prefork|mpmt_os2|winnt}
- prefork的工作原理(默认模式)
如果不用参数--with-mpm
显式指定某种MPM
,prefork
就是Unix平台上缺省的MPM
.它所采用的预派生子进程方式也是Apache1.3中采用的模式.prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一.
也就是apache启动时会产生主进程master,由主进程再预先派生一些子进程来接收处理客户端的请求,每个子进程有一个独立的线程,每个子进程能处理一个请求,相互之间也是独立的,好处是这是最稳定的工作模式.
缺点是很占用内存,无法为大数量级的客户端提供服务,不适用于高并发的网站. - worker的工作原理
worker是2.0版中全新的支持多线程和多进程混合模型的MPM.由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器.但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性.这种MPM的工作方式将是Apache2.0的发展趋势.
worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求.同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数.如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程.
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients.如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程.默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)
Worker模式:Worker MPM 使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。
Worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉".由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的". - 查看安装apache服务器支持的模块
[root@mini bin]# /usr/local/apache2/bin/httpd -l
,列表中的prefork.c
模块就代表的是prefork
模式
两种工作模式配置文件,/usr/local/apache2/conf/extra/httpd-mpm.conf
[root@mini extra]# vim /usr/local/apache2/conf/extra/httpd-mpm.conf
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 8 #初始化启动工作子进程,主进程master只有1个,开启服务时生成
ServerLimit 1000 #服务器最大并发数量,一般和 MaxClients保持一直,否则会报警,默认是256
MinSpareServers 25 #预留最小空闲进程
MaxSpareServers 75 #预留最大空闲进程
MaxClients 1000 #客户端最大连接数
MaxRequestsPerChild 100000 #每个子进程最大处理请求数之和,0表示无限制是一直存在,否则达到数量后杀掉重新生成
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
StartServers 2 #初始化启动工作子进程
MaxClients 4000 #客户端连接数,每秒最大的并发数
MinSpareThrea ds 25 #预留最小空闲线程
MaxSpareThreads 75 #预留最大空闲线程
ThreadsPerChild 500 #每个子进程支持的线程数量
MaxRequestsPerChild 10000 #每个线程处理连接总数,之后杀掉重新生成
</IfModule>
四、ReWrite规则
即网页重定向功能,实现的是URL的跳转,有两种配置方式,一种是基于服务器级别的即修改主配置文件httpd.conf,一种书目录级的即通过加载(.htaccess)文件.
实现rewrite功能需要在安装预编译的时候就增加参数--enable-rewrite
来为服务器增加特定的功能模块.
修改配置文件httpd.conf
,增加配置语句
RewriteEngine on #启用rewrite引擎
RewriteCond %{HTTP_HOST} ^wugk1.com [NC] //匹配以wugk1.com开头的域名,NC忽略大小写。
RewriteRule ^/(.*)$ http://www.wugk1.com/$1 [L]
//匹配上面条件,然后跳转到http://www.wugk1.com
1)R 强制外部重定向。
2)F 禁用URL,返回403HTTP状态码。
3)G 强制URL为GONE,返回410HTTP状态码。
4)P 强制使用代理转发。
5)L 表明当前规则是最后一条规则,停止分析以后规则的重写。
6)N 重新从第一条规则开始运行重写过程。
7)C 与下一条规则关联。