httpd|apache 存在C10K(10K connections)问题
nginx 解决C10K问题
lighttpd
IIS .asp 应用程序服务器
tomcat .jsp 应用程序服务器
jetty 开源的servlet容器,基于Java的web容器
Resin CAUCHO公司,支持servlets和jsp的引擎
webshpere(IBM)
weblogic(BEA)
jboss
oc4j(Oracle)
WIKI
特性
功能
httpd-2.4 新特性
MPM:Multi-processing module 多处理工作模式
prefork:多进程 I/O 模型,每个进程响应一个请求,CentOS7 默认模型 一个主进程:生成和回收 n 个子进程,
创建套接字,不响应请求 多个子进程:工作 work 进程,每个子进程处理一个请求;系统初始时,预先生成多个
空 进程,等待请求
Prefork MPM: prefork 预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应
用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定
的模式,适用于访问量不是很大的场景
worker:复用的多进程 I/O 模型,多进程多线程,IIS 使用此模型 一个主进程:生成 m 个子进程,每个子进程负责创建
n 个线程,每个线程响应一个请求,并发响应请求:m*n
worker MPM:是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程 面包含固定的
线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理
请求,由于其使用了线程处理请求,因此可以承受更高的并发。
event:事件驱动模型(worker 模型的变种),CentOS8 默认模型;一个主进程:生成 m 个子进程,每个子进程
负责创建 n 个线程,每个线程响应一个请求,并发响应请求:m*n,有专门的监控线程来管理这些 keep-alive
类型的线程,有请求时,将请求传递给服务线程,执行完毕后,允许释放。增强了高并发场景下的请求处理能力
uevent MPM:Apache 中最新的模式,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经
是稳定可用的模式。它和 worker 模式很像,最大的区别在于,它解决了 keep-alive 场景下,长期被占用的线程的
资源浪费问题(某些线程因为被 keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。
event MPM 中,会有一个专门的线程来管理这些 keep-alive 类型的线程,当有真实请求过来的时候,将请求传递
给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力
event 模式只在有数据发送的时候才开始建立连接,连接请求才会触发工作线程,即使用了 TCP 的一个选项,
叫做延迟接受连接 TCP_DEFER_ACCEPT,加了这个选项后,若客户端只进行 TCP 连接,不发送请求,则
不会触发 Accept 操作,也就不会触发工作线程去干活,进行了简单的防攻击(TCP 连接)
yum install httpd -y
dnf install httpd -y
/etc/httpd/conf/httpd.conf
主配置文件/etc/httpd/conf.d/\*.conf
子配置文件/etc/httpd/conf.d/conf.modules.d/
模块加载的配置文件/usr/lib/systemd/system/httpd.service
/etc/sysconfig/httpd
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status|reload} httpd.service
/etc/httpd/modules
/usr/lib64/httpd/modules
/usr/sbin/httpd
/etc/httpd/run/httpd.pid
access_log
: 访问日志error_log
: 错误日志配置文件主要组成
Global Environment 全局环境配置
Main server configuration 服务器配置
virtual host 虚拟主机配置
配置文件格式:
指令和值的格式:Directive value
Directive 指令不区分字符大小写
value 值为路径时,是否区分大小写,取决于文件系统
配置官方帮助
[root@centos8 ~]#grep -Ev '^ _#|^\$' /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/_.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I
%O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
[root@webhost ~]# grep -Ev '^ *#|^$' /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"
ServerSignature EMail
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin stevobs@163.com
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes
AllowOverride Options=Indexes,FollowSymLinks
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t" short
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combinedio
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset off
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
APR 官网:http://apr.apache.org
cd apr-1.7.0
./configure --prefix=/app/apr
make && make install
cd ../apr-util-1.6.1
./configure --prefix=/app/apr-util --with-apr=/app/apr/
make -j 2 && make install
cd ../httpd-2.4.39
./configure --prefix=/app/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/app/apr/ \
--with-apr-util=/app/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
make -j 4 && make install
mv apr-1.7.0 httpd-2.4.41/srclib/apr
mv apr-util-1.6.1 httpd-2.4.41/srclib/apr-util
ls httpd-2.4.41/srclib/
apr apr-util Makefile.in
cd httpd-2.4.41/
./configure \
--prefix=/app/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
make && make install
查看 httpd 的编译过程:
less /app/httpd24/build/config.nice
自带的服务控制脚本:
/app/httpd24/bin/apachectl
安装后配置
useradd -s /sbin/nologin -r apache
vim /app/httpd24/conf/httpd
user apache
group apache
vim /etc/profile.d/httpd24.sh
PATH=/app/httpd24/bin:$PATH
vim /etc/man_db.conf
MANDATORY_MANPATH /app/httpd24/man
vim /etc/rc.d/rc.local
/app/httpd24/bin/apachectl start
chmod +x /etc/rc.d/rc.local
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=/app/httpd24/bin/httpd $OPTIONS -k start
ExecReload=/app/httpd24/bin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH {
MAINPID}
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#自定义启动脚本(参考httpd-2.2的服务脚本)
cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
vim /etc/rc.d/init.d/httpd24
apachectl=/app/httpd24/bin/apachectl
httpd=${HTTPD-/app/httpd24/bin/httpd}
pidfile=${PIDFILE-/app/httpd24/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
chkconfig –add httpd24
chkconfig –list httpd24