web中间件之apache

Posted wuzm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web中间件之apache相关的知识,希望对你有一定的参考价值。

一、常见的web中间件(web容器)


 

https://www.jianshu.com/p/1e82b7a18866

  • apache
  • tomcat(springboot内置)
  • Jboss
  • Web Logic
  • lammp=linux+apache+mysql+php+pel

为什么要监控web中间件?? 

中间件监控看是否有性能瓶颈

核心:主要看中间件的线性池进程池有没有排队情况,请求是否处理及时就OK

 

二、apache


 

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。

我这里是yum安装的httpd,因为编译安装的只有一种工作模式,yum安装才能出来3种工作模式,这里yum安装比较容易切换工作模式,但是yum安装的httpd文件比较分散。

yum安装的三种工作模式:prefok;.event;.worker,也就是下面3个执行文件,默认是httpd这个文件的工作模式。

技术图片

yum安装httpd的目录详解:

技术图片

 

1、那么如何切换工作模式呢??如下...

把httpd的文件名改成其他的,把httpd.event改成 httpd 。其实默认的httpd本来的名字是 httpd.prefok

#killall -9 httpd  杀掉以前的httpd进程
#cd /user/sbin 
#mv  httpd  httpd.prefork  改名
#mv httpd.work   httpd 改名

2、apache配置文件和三种模式介绍。

配置文件是 /etc/httpd/conf下的httpd.conf  如下面图所示。

技术图片

来看下配置文件详解,去掉注释的。

https://blog.51cto.com/wujunbin/2049622  博客链接

ServerTokens OS            ##不用管,操作系统版本
ServerRoot "/etc/httpd"    ##apache的安装路径,不用改
PidFile run/httpd.pid      ##在/etc/httpd/run/有一个httpd.pid,这个意思是pidfile会生成在这个路径下。启动的时候这个文件会生成现,这个文件在的话,apache会判定是启动;关闭后这个文件默认会删除,但是如果有时候apache异常关闭,方法不对,会导致这个文件没删除。接下来apache也启动不了,正确做法是手动删除
Timeout 60                 ##超时时间,这个超时时间是什么超时???在接收跟发送之前的超时,是请求过来了,tcp/ip连接已经连接了,但是没处理。这个不是connection-timeout,connection-timeout是客户端配置的,客户端发送请求,比如60秒内没连上,就是connection-timeout
KeepAlive Off              ##JMeter默认的长链接是on。长链接是啥子东西呢,比如说请求一个页面,用一个链接形成一个链接通道,用这个通道再去send和receive这个请求。复用长链接的话是不同请求页面用之前的那个链接通道,通道会被占住,下次要用的话再继续用这个通道。省去了重新建立链接和关闭链接的过程,但是,链接通道是有限的,占满了的话,其他的请求就不能继续进行链接了
MaxKeepAliveRequests 100   ##最大长链接的请求数,比如说我给300个并发,但是只有100个长链接,代表有200个并发连接不上长链接
KeepAliveTimeout 15        ##长链接的会话保持时间,在这个链接通道内,一个客户端隔了15秒还没发送下一个请求,则长链接就被释放(一般设置3-5秒就够了)
# prefork MPM              ##MPM是工作模式,默认为profork
Listen 90                  ##对外提供服务的端口号,apache默认为80
LoadModule…….so(一大堆)   ##加载的动态库
Include conf.d/*.conf      ##把配置文件conf.d文件夹内的以.conf结尾的文件包含进来,可以切换到conf.d文件夹看一看,默认有个welcome.conf,php.conf(php编译后生成的)*/
User apache                ##哪个用户
Group apache               ##用户组
ServerAdmin root@localhost
UseCanonicalName Off
DocumentRoot "/usr/local/zentaopms/www"     ##工程路径,就是代码往哪儿搁,就往这里放,把安装包往这里放就得了
<Directory "/var/www/html">                 ##跟工程路径保持一致
ErrorLog logs/error_log                     ##日志路径
LogLevel warn                               ##日志级别,有debug, info, notice, warn, error, crit,alert, emerg可选择。详细点的日志用debug,一般我们用info级别
CustomLog logs/access_log common            ##用户日志,一般被注释,可打开

##状态码不同的提示过着提示的路径内容如下,其内容可自行定制:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html

监控的话,把下面俩的注释取消掉:且默认的Allow from .example.com 改成 Allow from all
如果httpd.conf没有以下内容,粘贴进去,就OK也可以加上监听效果
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from all
</Location>
ExtendedStatus On      ##这一行是详细的监听效果,不需要就不要加就ok
<Location /server-info>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from all
</Location>

 

 

  

 

 

 

 

 

 

 

apache是一种欲派生模式

技术图片

 1、查看端口占用命令    

netstat -anp |grep 端口号

netstat -nultp(此处不用加端口号)

netstat -anp |grep 82查看82端口的使用情况

2、kill掉某个端口占用进程

3、重启某个服务

 

prefork:进程工作模式

 配置apache的监控

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8  //最小不能为1,改为30的时候,满足最小5,超过最大20的,就杀掉10个进程
MinSpareServers    5  // 最小空闲进程
MaxSpareServers   20  //最大空闲进程
ServerLimit      256  //一个进程的最大连接数
MaxClients       256 //改为0,就不会杀死
MaxRequestsPerChild  4000
</IfModule>

 

Current Time: Saturday, 06-Jul-2019 20:02:29 CST
Restart Time: Saturday, 06-Jul-2019 20:02:13 CST
Parent Server Generation: 0
Server uptime: 16 seconds
1 requests currently being processed, 10 idle workers
__________W.....................................................
................................................................
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process

PID Key: 
   2151 in state: _ ,   2152 in state: _ ,   2153 in state: _ 
   2154 in state: _ ,   2155 in state: _ ,   2156 in state: _ 
   2157 in state: _ ,   2158 in state: _ ,   2159 in state: _ 
   2160 in state: _ ,   2161 in state: W ,

 

技术图片

技术图片

这是一个守护进程。

 

worker:线程工作模式 ,多进程多线程

 正常工作中是编译安装,编译时指定工作模式,切换工作模式重新编译安装。

yum切换工作模式。

#killall -9 httpd  杀掉以前的httpd进程
#cd /user/sbin 
#mv  httpd  httpd.prefork  改名
#mv httpd.work   httpd 改名
# worker MPM
# StartServers: initial number of server processes to start  //刚启动的进程数
# MaxClients: maximum number of simultaneous client connections //最多启动的进程数
# MinSpareThreads: minimum number of worker threads which are kept spare  //
# MaxSpareThreads: maximum number of worker threads which are kept spare  //
# ThreadsPerChild: constant number of worker threads in each server process  //
# MaxRequestsPerChild: maximum number of requests a server process serves  //
<IfModule worker.c>
StartServers         4   // 初始起4个进程                              2
MaxClients         300   //  最大连接数 
MinSpareThreads     25   //  最小空闲线程数,不满足起一个进程,而不是起线程。60
MaxSpareThreads     75   //  最大空闲线程数, 杀进程杀一个进程            80
ThreadsPerChild     25   //每个进程下起25个线程                         30
MaxRequestsPerChild  0   //一个进程的最大请求数,比如一个进程接受的请求数大于这个数字,这个进程处理完就自动关了。
</IfModule>

 

如果配置改错了,不满足最小起进程大于最大线程空闲数,则需要kill进程,kill掉又小于最小的,矛盾了。apache有个容错机制,在满足最大线程上加一个进程???如上后面的配置。
java是单进程,多线程。
 
三、tomcat
1、tomcat8、9配置用户名密码,博客

https://www.cnblogs.com/dadonggg/p/10033275.html

 2、tomcat监听

工作模式:

同步、异步、apr

线程池默认最大200。

技术图片

打印时间:接口时间,tomcat处理时间,比较,如果相差较大,则是cpu排队导致。

四、nginx 

nginx缺点,负载均衡时,nginx和负载的tomcat集群,session不共享。

apache+tomcat可以实现session共享。

技术图片

nginx五种负载均衡模式。

 

以上是关于web中间件之apache的主要内容,如果未能解决你的问题,请参考以下文章

2020Python修炼记web框架之Django 中间件

web中间件漏洞之IIS篇

Web中间件漏洞之Apache篇

Web中间件漏洞之jBoss篇

Django之中间件

Nodejs之使用express框架搭建WEB应用