Linux Apache web服务器

学习要点:

1.apache用途,工作模式,httpd.conf的配置重要参数
2.虚拟主机
3. 工作模式的参数优化

Apache 概述:

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。同时Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。也是一个基金会的名称、一种武装直升机等等。

apache发布静态站点,html jpg htm jss  png css txt 

wget -r -x http://www.baidu.com  抓取网站内容

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

1) 从概念上

进程:一个程序对一个数据集的动态执行过程,是分配资源的基本单位。
线程:一个进程内的基本调度单位。
线程的划分尺度小于进程,一个进程包含一个或者更多的线程。
进程是系统进行资源分配和调度的一个独立单位.
本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

2) 从执行过程中来看

进程:拥有独立的内存单元,而多个线程共享内存,从而提高了应用程序的运行效率。
线程:每一个独立的线程,都有一个程序运行的入口、顺序执行序列、和程序的出口。但是线程不能够独立的执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

3) 从逻辑角度来看:(重要区别)

多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但是,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理及资源分配。

apache的特点:

功能强大,配置简单,带度快,处理静态文件 ,应用广泛,性能稳定,并支持代理和负载均衡

apache适应场合

apache运行静态html网页,图片,处理静太小文件不如ningx
apache结合php引擎运行php,perl, python等程序 LAMP
apache结合tomcat resin运行jsp java等程序,
apache作代理,负载,rewrite规测过滤

Apache 的工作模式

  1. prefork:它是一个无线程设计的工作模式,进程与进程之间相互独立,一个连接占一个子进程,如果现有的子进程不能满足负载控制进程将派生新的子进程,可以通过配置文件来定义, 这种工作模式的优点是性能高,且比较稳定,不适用于高并发网站,比较消耗内存,如1个进程占用100M的内存,若内存只有1G那么只有1000/100=10个连接可用

  2. worker:它是一个多进程多线程混合工作模式,线程共享进程的内存,一个工作进程(子进程)可以处理大量的连接 ,如果其中的一个子进程断开,那么整个子进程的所有线程将会断开,也就是说所有的连接将会断开。如果现有子进程中的线程总数不能满足负载控制进程将派生新的子进程,这种工作模式的优点是网站并发能力强,但不太稳定
    这个嘛

  3. event:
    这是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。Event MPM不能在安全HTTP(HTTPS)访问下工作。

prefork模式:apache默认工作模式

每个工作进程(子进程)处理一个请求连接,如果默认启动的工作进程满了,新来的请求,会占用空闲进程连接,空闲进程不够,master会预先生成更多的进程,直到所有的请求数(并发数)达到maxclient为止。
worker模式:
每个工作进程(子进程)生成多个线程,每个线程接受新来的请求,空闲进程不够,master会预先生成更多的工作进程,工作进程再生成多个线程,满足用户来访问,直到所有的请求数(并发数)达到maxclient为止。

查询apache的工作模式

[root@localhost httpd]# httpd -l


StartServers              8        #工作进程(子进程), master进程只有1个,一般配置8-16个预派生 
ServerLimit            1500     #系统设置最大进程数,如果MaxClients超出了ServerLimit定义的范围那么它将无效,它的默认值为256
MinSpareServers         25           #默认生成的最少空闲进程数 ,表示目前没有接受任何连接也就是没有占用任何内存且连接资源
MaxSpareServers        75               #默认生成的最多空闲进程数
MaxClients           1000       #  最大客户端数,即同时允许的并发连接数,建议配置1000-4096,5000*3600*8
MaxRequestsPerChild   10000             #最大请求数,0代表不限,不推荐这样配置。它的含义是如果把值配置成10000,当达到10001时,也就是直到超过1万个请求后它将会从1重新开始



StartServers                  2           #工作进程(子进程),master进程只有1个
MaxClients                   150         #每秒总的并发数。每个子进程处理最大请求数,是他下属线程请求数之和,最好不要超过5000
MinSpareThreads          25             #默认生成的最少线程数
MaxSpareThreads         75             #默认生成的最少最多线程数
ThreadsPerChild            25            #每个子进程所支持的线程数,是他下属线程请求数之和, 这里为25,不能超过75
MaxRequestsPerChild    0             #最大请求数,0代表不限,不推荐这样配置,如果配置成10000,当达到10001时,重新从1开始处理

MaxClients of 1000 exceeds ServerLimit value of 256 servers, 

需要设置ServerLimit 1000

maxclients = statservers X Threadsperchild

通过加载模块的方式加载运行模式的模块

vim /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

cd /etc/httpd/modules
[root@localhost httpd]# ls modules/mod_mpm_
mod_mpm_event.so    mod_mpm_prefork.so  mod_mpm_worker.so 

Apache 安装

yum 安装

yum install httpd* -y

yum install apr-devel apr-util-devel gcc* pcre pcre-devel –y;      安装依赖包

源码包安装:

1、apr安装
wget -c http://mirrors.cnnic.cn/apache/apr/apr-1.5.2.tar.bz2
tar xvf apr-1.5.2.tar.bz2;cd apr-1.5.2
./configure --prefix=/usr/local/apr/ && make && make install

2、apr-util安装
wget -c http://mirrors.cnnic.cn/apache/apr/apr-util-1.5.4.tar.bz2
tar xvf apr-util-1.5.4.tar.bz2
cd ../apr-util
./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr/ && make && make install

3、pcre安装
wget -c ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.bz2
tar xvf pcre-8.39;cd pcre-8.39
./configure --prefix=/usr/local/pcre && make && make install

   下载源码包     httpd-2.4.25.tar.gz   
wget –c https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.25.tar.gz
tar xvf httpd-2.4.25.tar.gz;cd httpd-2.4.25; ./configure --prefix=/usr/local/apache/ --with-arp=/usr/local/apr --with-apr-util=/usr/local/arp-util --with-pcre=/usr/local/pcre --with-mpm=prefork 
make; make install

tar xvf httpd-2.4.25.tar.gz;cd httpd-2.4.25;
 ./configure --prefix=/usr/local/apache/ \
--enable-rewrite \
--enable-deflate \
--enable-expires \
--enable-headers \
--enable-modules=most \
--enable-so \
--with-mpm=worker \
--enable-rewrite && make && make install

--with-mpm=prefork    # 指定工作模式
--enable-rewrite      #  开启rewrite模块
--enable-so                #  DSO capability

发布目录  /user/local/apache/htdocs/

apache 服务与端口

端口:80
yum安装方式: server httpd restart

源码安装方式: 
/usr/local/apache/bin/apachectl  graceful           # 方式1
/usr/local/apache/bin/httpd -k restart                # 方式2
/usr/local/apache/bin/httpd  -t  配置语法检查      # 检查配置
apachectl -t 配置语法检查

将源码安装的命令做成软链接,直接使用
ls –n /usr/local/apache/bin/apachectl /usr/bin

Apachectl retart  # 链接完后,可简写

-k  start stop restart graceful
-h  帮助文件
-t  检查错误

ipocnfig/fushdns  刷新本地DNS

配置成系统服务:

#  cp /usr/local/apache/bin/apachectl /etc/init.d/httpd 
#  cp /usr/local/apache/bin/apachectl /usr/local/bin/httpd
#  ln -s /etc/init.d/httpd  /etc/rc.d/rc5.d/S61httpd
#  ln -s /etc/init.d/httpd  /etc/rc.d/rc4.d/S61httpd
#  ln -s /etc/init.d/httpd  /etc/rc.d/rc3.d/S61httpd

打开/etc/init.d/httpd文件在#!/bin/bash下面加入
  #chkconfig:345 61 61 
  #description:Apache

设置系统自启动

执行chkconfig --list |grep httpd就会出现httpd服务开机运行在345级别
注册服务 chkconfig --add httpd
设置启动级别 chkconfig --levels 345 httpd on