常见的http服务器器程序

httpd apache,存在C10K(10K connections)问题

C10K(Concurrent 10,000 Connections)问题是指,在同一时间内,服务器需要处理超过10,000个并发连接的情况。Apache HTTP服务器本身不是一个异步事件驱动的服务器,因此在处理大量并发连接时,性能会受到限制。为了解决这个问题,人们开发了一些异步事件驱动的服务器,例如Nginx和Node.js等。

nginx 解决C10K问题

IIS .asp

jetty  基于java的容器

tomcat  .jsp 应用程序服务器

websphere 、jboss、weblogic等

apache介绍

Apache是一款开源的Web服务器软件,由Apache软件基金会开发和维护。它最初是在1995年由Robert McCool创建,最初被称为NCSA HTTPd,后来在1996年成为Apache HTTP Server。

Apache的安全性和可扩展性也得到了广泛的认可。它提供了多种安全特性,例如基于SSL和TLS的加密通信、访问控制、认证和授权等。此外,Apache还支持多种模块和扩展,使其能够满足不同应用程序的需求,并提供了广泛的自定义选项。

Apache作为一款流行的Web服务器软件,具有许多优秀的特性,以下是其中的一些:

  1. 跨平台性:Apache可以运行在多种操作系统上,包括Unix、Linux、Windows和macOS等。
  2. 可扩展性:Apache支持多种模块和扩展,使其能够满足不同应用程序的需求,并提供了广泛的自定义选项。安全性:Apache提供了多种安全特性,例如基于SSL和TLS的加密通信、访问控制、认证和授权等。
  3. 高可靠性:Apache具有良好的稳定性和可靠性,可以处理大量的并发请求,支持高负载环境。
  4. 高性能:Apache使用多线程和多进程技术,可以快速处理并发请求,并提供高效的静态和动态内容服务。
  5. 多种Web开发技术支持:Apache支持多种Web开发技术,例如CGI、PHP、Perl和Python等。
  6. 易于配置:Apache的配置文件简单明了,易于管理和修改。
apache的MPM

在Apache中,MPM(Multi-Processing Modules,多进程模块)用于管理和处理客户端请求。MPM的不同实现方式对于Apache的性能、并发性和资源消耗等方面都有不同的影响。下面是Apache中几种常用的MPM:

Prefork MPM:使用基于进程的模型,在每个请求中创建一个独立的进程,适合处理低并发的Web应用。CentOS 7 默认模型

Worker MPM:使用基于线程的模型,在每个请求中创建一个独立的线程,适合处理高并发的Web应用。

Event MPM:是Worker MPM的改进版,使用异步事件处理模型,可以提高并发性和性能。

WinNT MPM:是运行在Windows平台上的MPM,使用基于线程的模型,适合处理低并发的Web应用。

不同的MPM在性能、并发性和资源消耗等方面有所差异,选择合适的MPM对于优化Apache的性能和稳定性非常重要。在实际应用中,需要根据实际情况选择合适的MPM,并进行相关的优化配置。

Prefork MPM

Prefork MPM是Apache中的一种MPM(Multi-Processing Module,多进程模块),使用基于进程的模型,有一个主控制进程,然后生成多个子进程, 每个请求中创建一个独立的进程来处理客户端请求。每个进程都独立运行,拥有自己的内存空间和系统资源。这种模型的优点是稳定性高,容易调试,每个进程的运行互不影响,适合处理低并发的Web应用。

#Prefork MPM的配置主要涉及到以下参数:
MaxClients:设置最大并发请求量,即同时处理的最大请求数。
ServerLimit:设置Prefork MPM可创建的最大子进程数。
StartServers:设置Prefork MPM启动时创建的子进程数。
MinSpareServers:设置Prefork MPM保持的最小空闲子进程数。
MaxSpareServers:设置Prefork MPM保持的最大空闲子进程数。
MaxRequestsPerChild:设置每个子进程最多处理的请求数,达到这个数值后将自动回收子进程。

Worker MPM

复用的多进程I/O模型,多进程多线程,IIS使用此模型一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n;它通过多进程的方式处理客户端请求。与Prefork MPM不同,Worker MPM在每个进程中启动多个线程来处理客户端请求,这些线程共享进程的内存空间。Worker MPM相比Prefork MPM的优点在于它的内存占用更少,同时可以处理更多的并发请求。

Worker MPM具有以下特点

每个进程可以处理多个线程,每个线程可以处理一个客户端连接,提高了服务器的并发性能。

多个线程共享进程的内存空间,可以减少内存开销。

适合处理长连接(Keep-Alive)请求,因为Worker MPM中每个线程可以处理多个请求,避免了频繁创建和销毁线程的开销。

Worker MPM的缺点在于:

由于多个线程共享进程的内存空间,因此需要特别注意线程安全问题。

Worker MPM在处理并发请求时,可能会出现线程阻塞或死锁等问题,需要合理调整配置参数和系统资源。

Event MPM

Event MPM是Apache HTTP Server 2.2版本之后引入的一种多进程模型。与Worker MPM类似,它也采用了一组共享线程池和一组独立进程池的方式。不同的是,在Event MPM中,进程池中的进程不再处理连接的I/O操作,而是将这些操作交给一个共享的线程池中的线程来完成。这些线程使用异步I/O机制来处理连接的读写操作,从而提高了并发处理能力和系统的稳定性。

Event MPM在处理大量并发连接时,比Worker MPM更加高效,因为它采用了异步I/O机制,避免了线程上下文切换带来的开销。但是,它相对于Prefork MPM和Worker MPM,使用起来更加复杂,需要一定的配置和调优技能。

75、Http安装_编译安装

yum安装apache
yum install

75、Http安装_编译安装_02

75、Http安装_Apache_03

75、Http安装_httpd_04

编译安装apache

编译安装 Apache 之前,需要先安装一些必要的依赖项。常见的包括 gcc、make、apr、apr-util、pcre、zlib 等,具体依赖项可以参考 Apache 的安装文档。

yum -y install gcc make pcre-devel openssl-devel expat-devel

下载apache安装包

wget https://dlcdn.apache.org/httpd/httpd-2.4.57.tar.gz #下载apache包
wget  https://dlcdn.apache.org//apr/apr-1.7.4.tar.gz  #下载apr包
wget  https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz #下载apr-util包

75、Http安装_Apache_05

75、Http安装_Apache_06

75、Http安装_httpd_07

解压缩

75、Http安装_编译安装_08

编译安装方式一(apr单独编译安装):

#编译安装apr
./configure --prefix=/data/apache/apr
make && make install

#编译安装apr-utli	
./configure --prefix=/data/apache/apr-util --with-apr=/data/apache/apr  #需指定apr安装路径
make && make install

#编译安装httpd
./configure --prefix=/data/apache/httpd  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/data/apache/apr/ --with-apr-util=/data/apache/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make -j 4 && make install

75、Http安装_Apache_09

75、Http安装_Apache_10

编译安装方式二(一并编译安装):

将apr 和apr-util源码与httpd 源码合并
 mv apr-1.7.4 httpd-2.4.57/srclib/apr
 mv apr-util-1.6.3 httpd-2.4.57/srclib/apr-util

75、Http安装_Apache_11

将三者一并编译并安装

./configure --prefix=/data/app/apache  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork

75、Http安装_apache_12

make -j 4 && make install

75、Http安装_Apache_13

编译安装后的配置

Httpd编译过程:/data/app/apache/build/config.nice

自带的服务控制脚本:/data/app/apache/bin/apachectl

创建专用账户

seradd -s /sbin/nologin -r apache

指定运行httpd的用户

vim /data/app/apache/httpd.conf
user apache
group apache

75、Http安装_apache_14

配置环境变量

vim /etc/profile.d/httpd24.sh
PATH=/data/app/apache/bin/bin:$PATH
source /etc/profile.d/httpd24.sh

75、Http安装_apache_15

配置帮助

vim /etc/man_db.conf
MANDATORY_MANPATH /data/app/apache/man

75、Http安装_编译安装_16

设置开机自动启动

vim /etc/rc.d/rc.local
/data/app/apache/bin/apachectl start
chmod +x /etc/rc.d/rc.local

创建service unit文件(CentOS 7 以上版本)

vim /usr/lib/systemd/system/httpd24.service

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/data/app/apache/bin/apachectl start
#ExecStart=/app/httpd24/bin/httpd $OPTIONS -k start
ExecReload=/data/app/apache/bin/apachectl graceful
#ExecReload=/app/httpd24/bin/httpd $OPTIONS -k graceful
ExecStop=/data/app/apache/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target

75、Http安装_httpd_17

75、Http安装_apache_18

75、Http安装_Apache_19