常见的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服务器软件,具有许多优秀的特性,以下是其中的一些:
- 跨平台性:Apache可以运行在多种操作系统上,包括Unix、Linux、Windows和macOS等。
- 可扩展性:Apache支持多种模块和扩展,使其能够满足不同应用程序的需求,并提供了广泛的自定义选项。安全性:Apache提供了多种安全特性,例如基于SSL和TLS的加密通信、访问控制、认证和授权等。
- 高可靠性:Apache具有良好的稳定性和可靠性,可以处理大量的并发请求,支持高负载环境。
- 高性能:Apache使用多线程和多进程技术,可以快速处理并发请求,并提供高效的静态和动态内容服务。
- 多种Web开发技术支持:Apache支持多种Web开发技术,例如CGI、PHP、Perl和Python等。
- 易于配置: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,使用起来更加复杂,需要一定的配置和调优技能。
yum安装apache
yum install
编译安装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包
解压缩
编译安装方式一(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
编译安装方式二(一并编译安装):
将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
将三者一并编译并安装
./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
make -j 4 && make install
编译安装后的配置
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
配置环境变量
vim /etc/profile.d/httpd24.sh
PATH=/data/app/apache/bin/bin:$PATH
source /etc/profile.d/httpd24.sh
配置帮助
vim /etc/man_db.conf
MANDATORY_MANPATH /data/app/apache/man
设置开机自动启动
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