当前主流的web服务器有哪些?
- Apache
- Nginx
- iis
Apache的工作模式有哪些?各自的特点和优缺点是什么?适用场景是什么?
apache主要工作模式有3种,分别如下:
prefork工作模式
- 特点
prefork模式是一种非线程的多进程模型,web服务(apache)启动就是启动master进程,随之
master进程会启动若干个worker子进程,一个进程对应一个线程。
master进程的工作就是管理worker子进程,而worker子进程的工作就是处理用户请求。
当用户发起一个请求,apache就会从空闲的子进程中选择一个来处理这个用户请求。
一个进程处理一个请求,处理完才处理下个请求
- 优点
1、用户不用等到其他进程处理完毕.因为只要有空闲子进程在就可以处理新的请求
2、每个请求相互独立,如果一个worker子进程崩溃了,不会影响其他worker进程处理请求。
3、此模式是线程安全的,所谓线程安全:多个线程无法同时操作一个对象
4、响应速度快,稳定
- 缺点
1、消耗CPU和内存资源大
2、并发量不高
worker工作模式
- 特点
是一种多进程多线程模型,仍然是一个master父进程启动若干个子进程,每个子进程启动若干个线程,每个线程处理每个请求
- 优点
1、worker模型的并发性高于prefork模型,适合高并发场景
2、消耗资源少
- 缺点
1、非线程安全,所以此模式只能使用线程安全版本的PHP
2、一旦某线程出了问题,可能导致整个进程死掉
event工作模式
(apache2.4新增的)
- 特点
是worker模式的升级版,为了解决长连接(keep-alive)问题而生的
使用worker模型,一个线程对应一个请求,当一个请求为长连接的时候,
线程就会保持当长连接状态,等待客户端的下一个请求,
这样子当前线程就不能处理其他客户端请求了
- 优点
event模型下,每个进程会有一个单独的线程来管理这些keep-alive类型的线程。
当新的请求过来的时候,管理线程会把请求交给其他的空闲线程处理。
这样子就避免了每个线程都被keep-alive阻塞
- 缺点
不支持https,在https协议下会退化成worker模型
Apache工作模式在哪里指定?如何查看当前apache处于哪种模式
- 在编译安装Apache的时候指定的 –with-mpm=profork
- 使用命令:./apachectl -l
Apache工作模式的配置文件在哪?各配置选项是什么?
- 配置文件默认是:httpd-mpm.conf
Apache2.4.X 多站点如何配置?
- 修改主配置文件
在httpd.conf中,打开多站点配置模块
Include conf/extra/httpd-vhosts.conf 把前面#号去掉
- 打开extra/httpd-vhost.conf文件并修改,代码如下:
//配置虚拟主机(站点)
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com mail.domain.com
DocumentRoot "/home/www"
#设置文件夹访问控制,其路径要和上一行的DocumentRoot一样,
<Directory "/home/www">
## 禁止显示目录结构
Options FollowSymlinks
## 允许.htaccess生效
AllowOverride All
## 请求控制
Require all granted
## 默认打开的页面设置
DirectoryIndex index.php index.html
</Directory>
</VirtualHost>
- 上面配置
请求控制
到底是什么?
Require all granted
代表所有人都可以访问Require all denied
代表所有人都不可以访问Require not ip 192.168.1.24
禁止指定ip访问
真正要禁止ip,请使用iptables