Web 基础——Apache

Web 基础——Apache

  • 一、Web 简介
    • 1.域名
    • 2.域名解析
    • 3.Web 基础概念
    • 4.HTTP 协议分析
      • 1)HTTP 请求报文和响应报文
    • 5.HTTP 状态码
    • 6.Apache 特点
      • 1)三种工作模式
        • Prefork
        • Worker
        • Event
  • 二、部署 Apache 网站服务
    • 1.编译安装 Apache
    • 2.安装后优化调整
    • 3.使用浏览器访问验证
    • 4.配置多个网页
    • 5.调整工作模式
      • 1)查看工作模式
      • 2)Prefork 工作模式
      • 3)Worker 工作模式
      • 4)Event 工作模式
    • 6.查看 Apache 访问日志
      • 1)方法+资源+协议

一、Web 简介

1.域名

域名就相当于是一个 IP 地址的面具,目的是为了便于记忆和访问一个或一组服务器的地址(网站,电子邮件,FTP 等)。

如:www.baidu.com 这就是一个完整的 FQDN(一个完整的 FQDN = 主机名 + 域名)

  • 主机名:www
  • 域名:baidu.com
  • 使用域名的原因:因为 IP 地址不方便记忆。

2.域名解析

  • 两种方式:本地 HOSTS 解析、DNS 服务器解析。

3.Web 基础概念

URL 和 URI 它俩之间很相似,URL 比 URI 能够更精确的定位到资源,资源位置是绝对路径,URI 的资源位置可以是相对路径。

  • URL = https://www.baidu.com/https 服务端协议,www.baidu.com 访问的域名,/ 访问的具体资源)

  • 静态页面后缀格式:.html .htm .xml

  • 动态页面后缀格式:.php .asp .jsp .py .cgi

网站传输协议:

  • http:超文本传输协议,监听的端口为 TCP 协议的 80 端口,不加密。
  • https:安全超文本传输协议,监听的端口号为 TCP 协议的 443 号端口,加密传输,使用证书加密。

4.HTTP 协议分析

HTTP:超文本传输协议是互联网上应用最为广泛的一种网络协议,协议的核心功能是传输 Web 服务器上的 HTML 页面及其它文件。

1)HTTP 请求报文和响应报文

HTTP 协议是一个应用层协议,其报文分为请求报文和响应报文。当客户端请求一个页面时,会先通过 HTTP 协议将请求的内容封装在 HTTP 请求报文之中,服务器收到该请求报文后根据协议规范进行报文解析,然后向客户端返回响应报文。

HTTP 报文结构为:

  • 起始行:对报文进行描述。
  • 头部:向报文中添加了一些附加信息,是一个名/只的列表,头部和协议配合工作,共同决定了客户端和服务器能做什么事情。
  • 主体:包含数据的主体部分。

5.HTTP 状态码

状态码 分类
100~199 信息性状态码
200~299 成功状态码
300~399 重定向状态码
400~499 客户端错误状态码
500~599 服务器端错误状态码
常见状态码:
  • 200:正常请求(OK)
  • 301:请求的页面永久跳转(Moved Permanently)
  • 302:临时跳转(Found)
  • 400:请求参数错误(Bad Request)
  • 401:账户密码错误(Authorization Required)
  • 403:权限被拒绝(Forbidden)
  • 404:文件未找到(Not Found)
  • 413:用户上传文件大小限制(Request Entity Too Large)
  • 502:网关错误(Bad Gateway)
  • 504:网关超时(Gateway Timeout)

6.Apache 特点

Apache 作为最早的 Web 服务程序,基于 HTTP 提供网页浏览服务;模块化设置、开放源代码、跨平台应用、支持多种 Web 编程语言、运行稳定。

1)三种工作模式

Apache 的核心模块叫多路处理模块 Multi-Processing Module,简称 MPM。

Prefork
  • 多进程模式,一个进程处理一个连接,每个进程相对来说都是独立的,这个过程会用到 Select (异步阻塞) 机制来通知;
  • 特点:稳定、响应快、消耗大量 CPU 和内存、不适用于高并发场景、Keep-Alive 长连接占据问题。

Web 基础——Apache_第1张图片

Worker
  • 多进程多线程模式,一个进程开多个线程、每一个线程处理一个连接,但通知机制还是 Select (异步阻塞) 不过可以接收更过的请求;
  • 特点:节省资源、兼容性不好、稳定性不高、适用于高并发场景、Keep-Alive 长连接占据问题。

Web 基础——Apache_第2张图片

Event
  • Worker 的升级版、把服务器进程和连接进行分析,基于异步 I/O 模型。
  • 请求过来后进程并不处理请求,而是直接交由其它机制来处理,通过 epoll 机制来通知请求是否完成;
  • 在这个过程中,进程本身一直处于空闲状态,可以一直接收用户请求。可以实现一个进程响应多个用户请求。
  • 并且 Event 模式对于 Keep-Alive 连接处理也有所优化,Event 模式由单独的线程处理 Keep-Alive 长连接,执行完毕后,又允许它释放。
  • 这样增强了高并发场景下的请求处理能力。
  • 特点:支持海量级高并发负载、消耗资源少、但其对 https 支持的不完美。

Web 基础——Apache_第3张图片
Keep-Alive 长连接:

  • TCP 连接在发送后将依然保持打开状态,于是浏览器可以继续通过相同的连接发送请求。
  • 保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。
  • 减少重复请求的次数,进而加快访问速度,实现长连接要客户端和服务端都支持长连接。

总结:

  • 不同模式效率不同,主要用来调优。使用 httpd -V | grep 'MPM' 可以查看当前使用模式。

二、部署 Apache 网站服务

准备工作

主机名 操作系统 IP地址 版本号
Apache CentOS 7.4 192.168.1.1 httpd-2.2.17.tar.gz

1.编译安装 Apache

  • 静态编译:将模块直接编译进 httpd 的核心中。静态编译的所有模块都会随着 httpd 的启动而启动。
  • 动态编译:将模块编译好,但不编译到 httpd 的核心中。要启动动态编译的模块,需要在配置文件中使用 LoadModule 指令加载。
[root@Apache ~]# wget http://archive.apache.org/dist/httpd/httpd-2.2.17.tar.gz
[root@Apache ~]# tar zxf httpd-2.2.17.tar.gz -C /usr/src/
[root@Apache ~]# cd /usr/src/httpd-2.2.17/
[root@Apache httpd-2.2.17]# ./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-cgi && make && make install

注解:

  • --enable-so:开启动态加载模块的功能。
  • --enable-rewrite:开启地址重写、重定向功能。
  • --enable-cgi:开启与一些动态编程语言之间进行交互的接口。

Web 基础——Apache_第4张图片
动态编译:

./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-modules=most \
--enable-mpms-shared=all && make && make install
  • 注意:本次实验并不需要做动态编译。

查看模块

/usr/local/httpd/bin/apachectl -D DUMP_MODULES											# 会显示静态编译还是动态编译

2.安装后优化调整

[root@Apache httpd-2.2.17]# ln -s /usr/local/httpd/bin/* /usr/local/bin/				# 优化执行路径
[root@Apache ~]# httpd -v																# 查看httpd版本
[root@Apache ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd					# 复制启动文件
[root@Apache ~]# sed -i 1a'#chkconfig: 35 85 15' /etc/init.d/httpd						# 在第一行后面插入
[root@Apache ~]# chmod +x /etc/init.d/httpd 											# 添加可执行权限
[root@Apache ~]# chkconfig --add httpd													# 添加为系统服务
[root@Apache ~]# chkconfig httpd on														# 设置开机自启
[root@Apache ~]# systemctl start httpd													# 开启httpd服务
[root@Apache ~]# netstat -anpt | grep 80												# 查看端口是否开启

Web 基础——Apache_第5张图片

3.使用浏览器访问验证

Web 基础——Apache_第6张图片

4.配置多个网页

[root@Apache ~]# cd /usr/local/httpd/htdocs/
[root@Apache htdocs]# rm -rf index.html
[root@Apache htdocs]# mkdir baidu
[root@Apache htdocs]# mkdir sina
[root@Apache htdocs]# echo "

www.baidu.com

"
> baidu/index.html [root@Apache htdocs]# echo "

www.sina.com

"
> sina/index.html

Web 基础——Apache_第7张图片
使用浏览器访问验证:
Web 基础——Apache_第8张图片
解决方法:

[root@Apache ~]# vim /usr/local/httpd/conf/httpd.conf
将主配置文件中的:
144     Options Indexes FollowSymLinks
替换为:
144     Options FollowSymLinks
[root@Apache ~]# systemctl restart httpd												# 重启httpd服务
[root@Apache ~]# netstat -anpt | grep 80												# 查看端口是否开启

Web 基础——Apache_第9张图片
使用浏览器访问验证:
Web 基础——Apache_第10张图片

5.调整工作模式

  • 注意:设置工作模式时,不仅要考虑网站的并发连接等工作效率,也要考虑服务器硬件占用情况,内存尤为重点考虑。

1)查看工作模式

[root@Apache ~]# httpd -V | grep 'MPM'

Web 基础——Apache_第11张图片

2)Prefork 工作模式

参数 作用
StartServers 服务器启动时建立的子进程数量
MinSpareServers 空闲子进程最小数量,当空闲子进程数小于该数值将产生新的子进程
MaxSpareServers 空闲子进程最大数量,当空闲子进程数大于该数值将杀死多余子进程
MaxClinets 限制用户最大并发数
MaxRequestsPerChild 每个子进程在其生存期内允许处理的最大请求数量
[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
36 <IfModule mpm_prefork_module>
37     StartServers          5
38     MinSpareServers       5
39     MaxSpareServers      20
40     MaxClients          150
41     MaxRequestsPerChild   10000
42 </IfModule>
[root@Apache ~]# vim /usr/local/httpd/conf/httpd.conf
将主配置文件中的:
370 #Include conf/extra/httpd-mpm.conf												# 去掉注释
替换为:
370 Include conf/extra/httpd-mpm.conf
[root@Apache ~]# systemctl restart httpd											# 重启httpd服务
[root@Apache ~]# netstat -anpt | grep 80											# 查看端口是否开启

Web 基础——Apache_第12张图片

3)Worker 工作模式

参数 作用
StartServers 服务器启动时建立的子进程数量
MinSpareServers 空闲子线程最少数量,当空闲子线程数量少于该数值将产生新的子线程
MaxSpareServers 空闲子线程最大数量,当空闲子线程数量大于该数量将杀死多余子线程
MaxClients 限制用户最大并发数
MaxRequestsPerChild 每个子进程在其生存期内允许处理的最大请求数量
[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
51 <IfModule mpm_worker_module>
52     StartServers          2
53     MaxClients          150
54     MinSpareThreads      25
55     MaxSpareThreads      75
56     ThreadsPerChild      50
57     MaxRequestsPerChild   10000 
58 </IfModule>

切换到 Worker 工作模式

[root@Apache ~]# systemctl stop httpd
[root@Apache ~]# cat /usr/local/httpd/build/config.nice						# 查看之前安装httpd的配置信息
[root@Apache ~]# cd /usr/src/httpd-2.2.17/
[root@Apache ~]# ./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-cgi \
--with-mpm=worker && make clean && make && make install

Web 基础——Apache_第13张图片
查看当前工作模式

[root@Apache ~]# httpd -V | grep 'MPM'										# 查看当前工作模式
[root@Apache ~]# systemctl start httpd										# 开启httpd服务
[root@Apache ~]# netstat -anpt | grep 80									# 查看端口是否开启
[root@Apache ~]# ps aux | grep httpd										# 查看httpd进程

Web 基础——Apache_第14张图片

4)Event 工作模式

参数 作用
ServerLimit 服务器开启最大的进程数
StartServers 服务器启动时建立的子进程数量
MaxClinets 限制用户最大并发数
MinSpareThreads 空闲子线程最小数量,当空闲子线程数小于该数值将产生新的子线程
MaxSpareServers 空闲子线程最大数量,当空闲子线程数大于该数值将杀死多余子线程
ThreadsPerChild 每个子进程的最大并发线程数
MaxRequestsPerChild 每个子进程在其生存期内允许服务的最大请求数量
[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
添加:
111 <IfModule mpm_event_module>
112     ServerLimit             1000
113     StartServers              20
114     MinSpareThreads           25
115     MaxSpareThreads         1200
116     ThreadsPerChild           50
117     MaxRequestsPerChild  	1000
118 </IfModule>
  • 如若开启 Event 工作模式,需要在编译安装时 --with-mpm=event 选项指定,并且内核版本最低需要 2.6

6.查看 Apache 访问日志

[root@Apache ~]# tail -3 /usr/local/httpd/logs/access_log 
192.168.1.250 - - [12/Apr/2021:20:21:19 +0800] "GET /baidu/ HTTP/1.1" 200 23
192.168.1.250 - - [12/Apr/2021:20:21:19 +0800] "GET / HTTP/1.1" 403 202
192.168.1.250 - - [12/Apr/2021:20:21:19 +0800] "GET /favicon.ico HTTP/1.1" 404 209

日志字段所代表的内容:

  1. 远程主机 IP:表明访问网站的是谁。
  2. 空白(E-mail):为了避免用户的被邮箱垃圾邮件骚扰,第二字段就用 - 取代了。
  3. 空白(登录名):用于记录浏览者进行身份验证时提供的名字。
  4. 请求时间:用方括号包围,而且采用公用日志格式或者标准英文格式。最后的 +0800 表示服务器所处时区位于 UTC 之后的 8 小时。
  5. 方法+资源+协议:服务器收到的是一个什么样的请求。典型格式为 "METHOD RESOURCE PROTOCOL",即 方法 资源 协议
  6. 状态码:请求是否成功,或者遇到了什么样的错误。
  7. 发送字节数:表示发送给客户端的总字节数。
  8. 客户端的系统,以及客户端访问服务器的浏览器类型。

1)方法+资源+协议

  • METHOD(方法):GET 表示从服务器上请求数据,POST 表示向服务器发送数据,HEAD 表示只请求资源的首部。
  • PESOURCE(资源):index.html /baidu/index.html …(请求的文件)
  • PROTOCOL(协议):HTTP + 版本号。

你可能感兴趣的:(Web,Web,基础——Apache,运维,linux,Apache三种工作模式,Apache优化)