apache基本配置管理一:apache服务介绍,以及简单搭建
一、apache服务简介:
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中
本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右
二、Apache服务器拥有以下特性:
[*] 支持最新的HTTP/1.1通信协议。Apache是最先使用HTTP/1.1协议的Web服务器之一,它完全兼容HTTP/1.1协议并与HTTP/1.0协议向后兼容。Apache已为新协议所提供的全部内容做好了必要的准备。
[*] 支持多计算机平台。Apache几乎可以在所有的计算机操作系统上运行,包括主流的UNIX、Linux及Windows操作系统。
[*] 拥有简单而强有力的基于文件的配置过程。配置文件简单,易操作。用户可以通过直接修改Apache的配置文件信息来修改Apache,操作起来十分方便。
[*] 支持实时监视服务器状态和定制服务器日志。Apache在记录日志和监视服务器自身运行状态方面提供了很大的灵活性,可以通过Web浏览器来监视服务器的状态,也可以根据自己的需要来定制日志。
[*] 支持多种方式的HTTP认证。
[*] 支持Web目录修改。用户可以使用特定的目录作为Web目录。
[*] 支持CGI脚本,如Perl、PHP等。
[*] 支持服务器端包含指令(SSI)。
[*] 支持安全Socket层(SSL)。
[*] 支持FastCGI。
[*] 支持虚拟主机。即通过在一台服务器上使用不同的主机名来提供多个HTTP服务。Apache支持基于IP、主机名和端口号三种类型的虚拟主机服务。
[*] 跟踪用户会话。当用户浏览基于Apache的Web站点时,可以通过Apache的mod_usertrack模块对其进行跟踪。
[*] 支持动态共享对象。Apache的模块可在运行时动态加载,这就意味着这些模块可以被装入服务器进程空间,从而减少系统的内存开销。
[*] 支持多进程。当负载增加时,服务器会快速生成子进程来处理,从而提高系统的响应能力。
[*] 支持第三方软件开发商提供的功能模块。比如Apache加载mod_jserv模块后可以支持Java Servlet,这样就可以运行Java应用程序了。
[*] 支持多线程和多进程混合模型的MPM。 当MPM类型指定为worker时,由于是使用线程来处理,所以可以处理海量的请求,而系统资源的开销要小于基于进程的服务器。
[*] 支持实时监视服务器状态和定制服务器日志
[*] 支持通用网关接口
[*] 支持基于IP和基于域名的虚拟主机
[*] 集成代理服务器模块
[*]
三、apache工作模式:
Apache 2.X支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性。
Worker MPM : 使用多个子进程,每个子进程中又有多个线程。每个线程处理一个请求,该MPM通常对高流量的服务器是一个不错的选择。因为它比prefork MPM需要更少的内存且更具有伸缩性。比较适合负载均衡的场合。
prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止.这就是预派生(prefork)的由来.这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能.
worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求.同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数.如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程.
Prefork MPM : 使用多个子进程,但每个子进程不包含多线程。每个进程只处理一个连接。在许多系统上它的速度和worker MPM一样快,但是需要更多的内存。这种无线程的设计在某些性况下优于worker MPM,因为它可在应用于不具备线程安全的第三方模块上(如 PHP3/4/5),且在不支持线程调试的平台上易于调试,另外还具有比worker MPM更高的稳定性。
prefork 是apache默认的工作模式,可以在编译的时候加参数-with-mpm-work选择工作模式。
概括的说
prefork的特点是预派生
1:这种模式可以不必在请求到来时再产生新的进程,从而减少了系统开销
2:可以防止意外的内存泄漏
3:在服务器负载下降的时候会自当减少子进程数
work的特点是:
支持混合的多线程多进程的多路处理模块
如果对于一个高流量的http服务,work mpm是一个比较好的选择,因为work mpm占用的内存要比prefork要小。
四、apche服务搭建:
A:搭建方式yum 安装apache
默认没有修改apache的http.conf配置文件
实验环境,实验主机为redhat5.8,IP地址为:192.168.137.11
# yum -y install httpd
查看软件是否已经安装
# rpm -qahttpd
httpd-2.2.3-63.el5
安装完成后查看安装文件:
rpm -ql httpd
对应的文件做一些简单说明:
服务脚本:/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
运行目录:/etc/httpd
配置文件:
主配置文件:/etc/httpd/conf/httpd.conf
扩展配置:/etc/httpd/conf.d/*.conf
监听的Socket:80/tcp,443/tcp
文档根目录:/var/www/html
CGI:/var/www/cgi-bin/
默认主页:index.html
在实验之前,须确保在httpd.conf配置文件中:
httpd服务监听的端口为80【Listen 80】
开启DocumentRoot "/var/www/html/"
启动服务查看进程和端口状态
# /etc/init.d/httpd start
Stopping httpd:
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.137.11 for ServerName
# ps -ef | grep httpd
root 11211 10 21:56 ? 00:00:00 /usr/sbin/httpd
apache 11212 112110 21:56 ? 00:00:00 /usr/sbin/httpd
apache 11213 112110 21:56 ? 00:00:00 /usr/sbin/httpd
apache 11214 112110 21:56 ? 00:00:00 /usr/sbin/httpd
apache 11215 112110 21:56 ? 00:00:00 /usr/sbin/httpd
apache 11217 112110 21:56 ? 00:00:00 /usr/sbin/httpd
apache 11218 112110 21:56 ? 00:00:00 /usr/sbin/httpd
apache 11219 112110 21:56 ? 00:00:00 /usr/sbin/httpd
apache 11220 112110 21:56 ? 00:00:00 /usr/sbin/httpd
root 11249 109530 22:01 pts/3 00:00:00 grep httpd
# netstat -tulnp | grep 80
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 4280/sendmail
tcp 0 0 :::80 :::* LISTEN 11211/httpd
#
访问http://IP:80
如果想自定义内容,可以通过修改文档根目录的内容
# pwd
/var/www/html
# cat index.html
my first website1 !!
#
语法检测
# httpd -t
httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.137.11 for ServerName
Syntax OK
#
重新加载配置
# /etc/init.d/httpd reload
Reloading httpd:
#
B:搭建方式rpm搭建apache
实现环境:redhat7.2 .ip:192.168.137.11
首先查看安装包是否存在
rpm -qa httpd
tar -zxvf httpd-2.4.9.tar.gz
cd httpd-2.4.9/
yum install apr apr-utilapr-devel apr-util-devel
./configure --prefix=/usr/local/apache --enable-rewrite --enable-so
安装apache发现需要安装pcre来支持perl库
yum -y install libpcre
yum -y install libpcre*
./configure --prefix=/usr/local/apache --enable-rewrite --enable-so
yum -y install libpcre-devel*
./configure --prefix=/usr/local/apache --enable-rewrite --enable-so
./configure --prefix=/home/tnuser/apache/--with-apr=/usr/local/apr/--with-apr-util=/usr/local/apr-util/--with-pcre=/usr/local/pcre/
于是编译安装prce,但是便宜prce时需要C++,C++依赖Development Tools
tar -zxvf pcre-8.40.tar.gz yum -y install C++
yum groupinstall "Development Tools"
cd /root/pcre-8.40pcre-8.40/
chmod -R 777 /root/pcre-8.40
./configure --prefix=/usr/local/pcre/
make && make install
cd httpd-2.4.9/
./configure --prefix=/usr/local/apache/--with-apr=/usr/local/apr/--with-apr-util=/usr/local/apr-util/--with-pcre=/usr/local/pcre/--enable-rewrite --enable-so
然后继续编译apache
./configure --prefix=/usr/local/apache/ --with-pcre=/usr/local/pcre/--enable-rewrite --enable-so
make&& make install
/usr/local/apache/bin/apachectl start
编译成功后启动服务:
ps -ef | grep 80
netstat -tulnp | grep 80
# /usr/local/apache/bin/apachectl -v
Server version: Apache/2.4.9 (Unix)
Server built: Feb7 2017 07:45:52
#
查看运行效果:
下篇我们将搭建虚拟主机,先熟悉下,源码安装apache的配置文件
# pwd
/usr/local/apache/conf/extra
# ll | grephttpd-vhosts.conf
-rw-r--r-- 1 root root1467 Feb7 07:52 httpd-vhosts.conf
# cd ..
# ll
total 92
drwxr-xr-x 2 root root4096 Feb7 07:52 extra
-rw-r--r-- 1 root root 18232 Feb7 07:52 httpd.conf
-rw-r--r-- 1 root root 13077 Feb7 07:52 magic
-rw-r--r-- 1 root root 53011 Feb7 07:52 mime.types
drwxr-xr-x 3 root root 35 Feb7 07:52 original
#
查看http的并发请求数及其TCP连接状态:
# netstat-n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a, b}'
ESTABLISHED 2
#
用tcpdump嗅探80端口的访问看看谁最高:
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
页:
[1]