Web 基础——Apache

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 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 和 url 它俩之间很相似,Url 比 url 能够更精确的定位到资源,资源位置是绝对路径,url 的资源位置可以是相对路径。


  • 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 状态码


image.png


常见状态码:


  • 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 长连接占据问题。


image.png


Worker


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



image.png


Event


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

image.png


Keep-Alive 长连接:


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


总结:


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


二、部署 Apache 网站服务



准备工作


image.png


image.pngimage.pngimage.png

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:开启与一些动态编程语言之间进行交互的接口。


image.png


动态编译:


./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                        # 查看端口是否开启


image.png


3.使用浏览器访问验证


image.png


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 "<h1>www.baidu.com</h1>" > baidu/index.html
[root@Apache htdocs]# echo "<h1>www.sina.com</h1>" > sina/index.html


image.png


使用浏览器访问验证:


image.png


解决方法:


[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                        # 查看端口是否开启


image.png


使用浏览器访问验证:


image.png


5.调整工作模式


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


1)查看工作模式


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


image.png


2)Prefork 工作模式


image.png


[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                      # 查看端口是否开启


image.png


3)Worker 工作模式


image.png


[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


image.png


查看当前工作模式


[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进程


image.png


4)Event 工作模式


image.png


[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 + 版本号。


相关文章
|
2月前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
56 0
|
4月前
|
缓存 前端开发 Java
打造未来兼容的Web应用:Apache Wicket引领响应式设计的热潮
【9月更文挑战第4天】在软件开发领域,构建响应式Web应用至关重要。Apache Wicket作为一个强大的Java框架,支持响应式设计,确保应用在不同设备上均有出色体验。本文通过示例代码介绍使用Wicket的最佳实践,涵盖页面与组件模型、CSS媒体查询及自定义标记处理器的应用。同时,文章强调了优化加载时间、增强交互性和提升可访问性的重要性,帮助开发者打造高性能且美观的Web应用。
63 3
|
4月前
|
Java API Apache
从零到英雄的蜕变:如何用Apache Wicket打造你的第一个Web应用——不仅是教程,更是编程之旅的启航
【9月更文挑战第4天】学习Apache Wicket这一开源Java Web应用框架是一段激动人心的旅程。本文将指导你通过Maven搭建环境,并创建首个“Hello, World!”应用。从配置`pom.xml`到实现`HelloWorldApplication`类,再到`web.xml`的设置,一步步教你构建与部署简单网页。适合初学者快速上手,体验其简洁API与强大组件化设计的魅力。
101 1
|
5月前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
|
5月前
|
Java 应用服务中间件 Apache
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
本文介绍了在IntelliJ IDEA中修改Web项目访问路径的步骤,包括修改项目、模块、Artifacts的配置,编辑Tomcat服务器设置,以及解决Apache Tomcat控制台中文乱码问题的方法。
278 0
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
|
5月前
|
Java Spring Apache
Spring Boot邂逅Apache Wicket:一次意想不到的完美邂逅,竟让Web开发变得如此简单?
【8月更文挑战第31天】Apache Wicket与Spring Boot的集成提供了近乎无缝的开发体验。Wicket以其简洁的API和强大的组件化设计著称,而Spring Boot则以开箱即用的便捷性赢得开发者青睐。本文将指导你如何在Spring Boot项目中引入Wicket,通过简单的步骤完成集成配置。首先,创建一个新的Spring Boot项目并在`pom.xml`中添加Wicket相关依赖。
140 0
|
5月前
|
Apache 开发者 Java
Apache Wicket揭秘:如何巧妙利用模型与表单机制,实现Web应用高效开发?
【8月更文挑战第31天】本文深入探讨了Apache Wicket的模型与表单处理机制。Wicket作为一个组件化的Java Web框架,提供了多种模型实现,如CompoundPropertyModel等,充当组件与数据间的桥梁。文章通过示例介绍了模型创建及使用方法,并详细讲解了表单组件、提交处理及验证机制,帮助开发者更好地理解如何利用Wicket构建高效、易维护的Web应用程序。
64 0
|
5月前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
56 0
|
5月前
|
前端开发 JavaScript 开发者
革命性的飞跃:Apache Wicket新特性大揭秘,让你的Web开发之旅如虎添翼!
【8月更文挑战第31天】Apache Wicket作为一个成熟的Java Web框架,持续进化以适应现代Web开发需求。本文介绍Wicket的最新特性,包括响应式布局支持、组件化与模块化开发、异步请求处理、增强的表形处理以及与现代JavaScript框架的集成。通过具体代码示例展示如何利用这些特性构建高效、灵活且用户友好的Web应用程序。
66 0
|
5月前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
125 0

推荐镜像

更多