第3章 用Apache做Web服务器
LAMP服务器:Linux,Apache,MySQL,Perl/Python/PHP的组合
Apache服务器是Linux上使用最多的Web服务器。(Ubuntu中只有Apache 2)
Ubuntu和Debian对Apache2做了大量定制。以下是/etc/apache2目录下的说明:
apache2.conf | 全局配置文件,不要轻易修改它 |
conf.d/ | 该目录存放一些一般性的配置 |
envvars | 存放环境变量,一般不需要修改 |
httpd.conf | 用户配置文件 |
mods-available | 该目录下是已经安装的可用模块 |
mods-enabled | 该目录下是已经启用的模块 |
ports.conf | httpd服务的端口 |
sites-available | 该目录下是可用的虚拟主机 |
aites-enabled | 该目录下是已经启用的虚拟主机 |
默认情况下,Apache把网站文件放在/var/www目录下
Apache不仅支持基于域名的虚拟主机,还支持基于IP的虚拟主机。
(域名的)虚拟主机配置文件放在/etc/apache2/sites-available目录下。
创建新的虚拟主机:复制一份default虚拟主机,编辑复制的配置文件,修改路径,此外修改ErrorLog和CustomLog的路径,创建目录并写入index.html文件,禁用default虚拟主机。
虚拟主机配置详情:
NameVirtualHost指令是用来指定服务器的IP地址,只适用于基于名字的虚拟主机。如果这个指令后面不指定IP地址而以星号代替的话,该虚拟主机就可以从所有网卡走。
ServerAdmin指令用于指定站长E-mail地址
DocumentRoot指令(比较重要)用来指定网站的根目录
<VirtualHost></VirtualHost>指令就像一对括号,只针对当前的虚拟主机。
<Directory></Directory>指令中间包含的指令,仅对指定的目录有效,该目录可以是特指的某个目录
Options指令用来配置指定目录的特性。
AllowOverride指令是针对 .htaccess 文件,可以允许该文件的全部或部分或没有指令
Order指令用来控制默认访问状态,以及Allow和Deny指令的生效顺序。
Allow指令用来控制哪些主机可以访问
Deny指令用来限制主机访问
ErrorLog指令定义了错误日志的位置
LogLevel指令用来控制日志的详细程度的级别
CustomLog指令定义了访问日志的路径和格式
ServerSignature指令用来定义服务器所生成页面的页脚
Alias指令提供路径别名,让你用起来更方便。
HTTPS的实现:
如果web应用对安全性要求比较搞,需要加密的话可以用SSL模块。这时开头将变为 https://
实现步骤:1.启用mod_ssl模块;2.生成证书,安装证书;3.修改虚拟主机配置文件,重启Apache服务。
有可能重启Apache服务以后会有一些错误或警告哦,要按照提示排除
------------------------------------------------------------------------------------------------------
Apache性能优化
正确选择MPM——1.event 比较适用于有大量持续连接的,对包含大量图片的HTML文档可以实现加速;2.prefork 虽然不快,但是很稳定,3.worker 是新开发的,速度比prefork快很多,也比较节省资源。关闭DNS查询:HostnameLookups在默认情况下已经被设置为off,因为开启的话会降低Apache的性能。
优化MaxClients:可以把MaxClients的值设定为更高,如果超过256,就要修改ServerLimit的值。是否需要修改MaxClients是通过查看/var/log/apache2/error.log来发现的
优化KeepAlive:可以吧KeepAliveTimeout设置得小一点,那么为客户保存连接的时间就会短一些
启用压缩:启用deflate压缩
禁用不必要的日志:
使用缓存(mod_cache):mod_disk_cache和mod_mem_cache
Apache压力测试(ab)
Apache 2自带的性能测试工具(ab)可以测试当前的Apache每秒钟能够处理的请求的数量
ab [options] [http[s]://]hostname[:port]/path
Apache安全
安全更新:有时候需要运行 apt-get dist-upgrade才能升级所有软件包
隐藏敏感信息:为了防止黑客得到关于服务器和操作系统的版本信息等,可以使用ServerTokens指令(该指令不能用于虚拟机中)
不要以root身份运行Apache:如果发现是root用户运行的话,应该检查服务器是否被攻击过
密码认证:分为基本认证(需要提供正确的用户名和密码)和摘要式认证(启用摘要式认证的模块)。
检查文件权限:不要设置为777,也就是其他用户,群组的权限要限制
关闭不用的模块:不需要的模块就一定不要启动
DDoS攻击防范:使用mod-evasive模块可以很大程度防范DDoS攻击。
Apache日志分析
用Webalizer分析Apache日志:配置的时候可以修改被分析的文件名,文件路径等
用AWStats分析Apache日志:需要配置Apache文件(输入一段文字,不写了),还要修改/etc/apache2/apache2.conf,告知Apache你配置的文件,此外还要配置AWStats,
Apache日志合并:一定不能将多台服务器的日志写入同一个文件中。可以使用合并工具,比如logresolvemerge.pl工具
文件同步,可以使用rsync。 合并的命令有点点像cat里面的合并哦……不过这个会去掉重复的内容
合并操作可以写成cron任务,让系统定期自动运行。