HTTPD(apache web服务器)
安装包:httpd-2.4.6-45.el7.centos.4.x86_64.rpm #yum install -y httpd
httpd-manual-2.4.6-45.el7.centos.4.noarch.rpm 文档
端口: 80(http) 443(https)
配置文件: /etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/ 子配置文件目录
/etc/httpd/conf.modules.d 模块相关子配置文件 动态加载模块
数据目录:/var/www/html
启动服务:systemctl restart httpd
日至存放目录:/var/log/httpd/ error.log access.log
linux客户端访问
elinks 192.168.206.20 #yum install -y elinks
elinks --dump 192.168.206.20 显示在终端上
curl 192.168.206.20
服务器端查看服务是否启动
netstat -anplt | grep :80
tcp6 0 0 :::80 :::* LISTEN 4642/httpd
http: 超文本传输协议: hyper text tranfer protocol
html:超文本标记语言:hyper text mark langue
编写测试页
vim /var/www/html/index.html
<html>
<head>
<title>test/title>
</head>
<body>
<h2>beautiful</h2>
<br>
<a href="http://www.baidu.com"><h3>搜索其美女</h3></a>
<br>
<img src="beautiful.jpg">
</body>
</html>
[root@localhost ~]# ls /var/www/html/
beautiful.jpg index.html
ps:index.html 一般为http服务的主页
也可以用windows访问直接在地址栏输入web服务器地址即可
ps:systemctl stop firewalld.service 关闭虚拟机防火墙
setenforce 0 关闭虚拟机selinux
浏览器访问网页流程图
C/S :client/service(软件端游) B/S:browser/service
apache三种工作模式
查看工作模式
httpd -V
1. prefork MPM
Apache在启动之初,就预先fork(创建)一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。
2.worker MPM
worker模式比起上一个,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些
优点:占据更少的内存,高并发下表现更优秀。
缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,某个线程会一直被占据,也许中间几乎没有请求,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用
3. event MPM
这个是Apache中最新的模式,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。
注意一点,event MPM需要Linux系统(Linux 2.6+)对EPoll的支持,才能启用
pstree -c |grep httpd
切换模式
像开启那个模式就去掉那个模式前边的注释符:#
切换方式
vim /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
<IfModule mpm_worker_module>
StartServers 10
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
#LoadModule mpm_event_module modules/mod_mpm_event.so
<IfModule mpm_event_module>
StartServers 15
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
保持连接(长连接)
KeepAlive On
KeepAliveTimeout 15
MaxKeepAliveRequests 100
修改http访问默认位置
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
#DocumentRoot "/var/www/html"
DocumentRoot "/etc"
<Directory "/etc">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
其他方法
方法1:
cp -r /boot /var/www/html #将文件复制到目录
方法2:
ln -s /boot/ /var/www/html #创建软连接
方法3:
别名
alias /down /home
<directory /home>
options indexes
Require all granted
</directory>
alias /upup /var
<Directory "/var">
options indexes
require all granted
</Directory>
useradd robin
useradd zorro
mkdir /home/tong/public_html
mkdir /home/tom/public_html
echo "tomn home" > /home/robin/public_html/index.html
echo "tom home" > /home/zorro/public_html/index.html
chmod 705 /home/tong/
chmod 705 /home/tom/
客户端测试
虚拟主机(基于域名 基于ip)
基于域名虚拟主机(使用一个公网ip对应解析多个域名,并且访问到不同网页)
[root@nfsserver ~]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
ServerName www.tong.com
DocumentRoot /srv/east
</VirtualHost>
<VirtualHost *:80>
ServerName www.tom.com
DocumentRoot /srv/west
</VirtualHost>
<Directory "/srv/east">
Options Indexes
Require all granted
</Directory>
<Directory "/srv/west">
Options Indexes
Require all granted
</Directory>
[root@nfsserver ~]# mkdir /srv/tong
[root@nfsserver ~]# mkdir /srv/tom
[root@nfsserver ~]# vim /srv/tong/index.html
[root@nfsserver ~]# vim /srv/tom/index.html
[root@nfsserver ~]# systemctl restart httpd
客户端
[root@client ~]# vim /etc/hosts #域名解析
测试:
[root@client ~]# elinks --dump www.tong.com
tong
[root@client ~]# elinks --dump www.tom.com
tom
基于ip虚拟主机
[root@nfsserver conf.d]# vim vhost_ip.conf
<VirtualHost 192.168.206.20:80>
DocumentRoot /srv/hahaha
ServerName www.hahaha.com
</VirtualHost>
<VirtualHost 172.17.206.20:80>
DocumentRoot /srv/liuliuliu
ServerName www.liuliuliu.com
</VirtualHost>
<Directory "/srv/liuliuliu">
Options indexes
Require all granted
</Directory>
<Directory "/srv/hahaha">
Options indexes
Require all granted
</Directory>
[root@nfsserver conf.d]# systemctl restart httpd
[root@nfsserver conf.d]# mkdir /srv/hahaha
[root@nfsserver conf.d]# mkdir /srv/liuliuliu
[root@nfsserver conf.d]# echo "哈哈哈" > /srv/hahaha/index.html
[root@nfsserver conf.d]# echo "666" > /srv/liuliuliu/index.html
客户端
vim /etc/hosts
172.17.206.20 www.liuliuliu.com
测试
[root@client ~]# elinks --dump www.hahaha.com
哈哈哈
[root@client ~]# elinks --dump www.liuliuliu.com
666
在网卡上添加删除IP地址
ip addr add 192.168.206.20/24 dev ens33
ip addr del 192.168.206.20/24 dev ens33