RHCE | Web 服务器与 Nginx 全栈详解

Web 服务器

4.1 www 简介

Web 网络服务也叫 WWW (World Wide Web 全球信息广播) 万维网服务,一般是指能够让用户通过 浏览器访问到互联网中文档等资源的服务

Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响 应,最终用于提供服务程序的 Web 服务器会通过 HTTP (超文本传输协议) 或 HTTPS (安全超文 本传输协议) 把请求的内容传送给用户,如图:

4.1.1 常见 Web 服务程序介绍:

Windows 系统中默认 Web 服务程序是 I I S (Internet Information Services), 这是一款图形化的网 站管理工具,IIS 程序不光能提供 Web 网站服务,还能够提供 FTP、NMTP、SMTP 等服务功能,但只 能在 Windows 系统中使用

2004 年 10 月 4 日,为俄罗斯知名门户站点而开发的 Web 服务程序 Nginx 横空出世。Nginx 程序 作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市场,但 Nginx 最被 认可的还当是低系统资源占用、内存少且并发能力强,因此得到了国内诸如新浪、网易、腾讯等门 户站的青睐

Apache-- 取自美国印第安人土著语 Apache, 寓意着拥有高超的作战策略和无穷的耐性,由于其跨 平台和安全性广泛被认可且拥有快速、可靠、简单的 API 扩展。目前拥有很高的 Web 服务软件市场 占用率,全球使用最多的 Web 服务软件,开源、跨平台 (可运行于 Unix,linux,windows 中)

Tomcat-- 属于轻量级的 Web 服务软件,一般用于开发和调试 JSP 代码,通常认为 Tomcat 是 Apache 的扩展程序

4.1.2 服务器主机

网站是由域名、网页源程序和主机空间组成的,其中主机空间则是用于存放网页源代码并能够将网 页内容展示给用户,虽然本小节与 Apache 服务没有直接关系,但如果您想要在互联网中搭建网站 并被顺利访问,主机空间一定不能选错

虚拟主机:在一台服务器中分出一定的磁盘空间供用户放置网站、存放数据等,仅提供基础的网站访 问、数据存放与传输流量功能,能够极大的降低用户费用,也几乎不需要管理员维护除网站数据以 外的服务,适合小型网站

VPS (Virtual Private Server): 在一台服务器中利用 OpenVZ、Xen 或 KVM 等虚拟化技术模拟出多个 "主机", 每个主机都有独立的 IP 地址、操作系统,实现不同 VPS 之间磁盘空间、内存、CPU 资源、进 程与系统配置间的完全隔离,管理员可自由使用分配到的主机中的所有资源,所以需要有一定的维 护系统的能力,适合小型网站

云服务器 (ECS): 是一种整合了计算、存储、网络,能够做到弹性伸缩的计算服务,其使用起来与 VPS 几乎一样,但差别是云服务器建立在一组集群服务器中,每个服务器都会保存一个主机的镜像 (备份), 大大的提升了安全稳定性,另外还具备了灵活性与扩展性,用户只需按使用量付费的即 可,适合大中小型网站。

独立服务器:这台服务器仅提供给您使用,详细来讲又可以区分为租用方式与托管方式

租用方式:用户只需将硬件配置要求告知 IDC 服务商,服务器硬件设备由机房负责维护,运维管 理员一般需要自行安装相应的软件并部署网站服务,租期可以为月、季、年,减轻了用户初期 对硬件设备的投入,适合大中型网站。

托管方式:用户需要自行购置服务器后交给 IDC 服务供应商的机房进行管理 (缴纳管理服务费 用), 用户对服务器硬件配置有完全的控制权,自主性强,但需要自行维护、修理服务器硬件 设备,适合大中型网站。

另外有必要提醒,选择主机空间供应商时请一定要注意看口碑,综合分析再决定购买,某些供 应商会有限制功能、强制添加广告、隐藏扣费或强制扣费等恶劣行为,一定一定不要上当!

4.1.3 主要数据

服务器所提供的最主要数据是超文本标记语言 (Hyper Text Markup Language,HTML)、多媒 体文件 (图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML 只是一些纯文本数 据,通过所谓的标记来规范所要显示的数据格式

4.1.4 浏览器

客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕 上。

那么著名的浏览器就有内建在 Windows 操作系统内的 IE 浏览器 (淘汰) 和 Microsoft Edge, 还有 Firefox 浏览器和 Google 的 chrome 浏览器

4.1.5 网址及 HTTP 简介

web 服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放 置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在 redhat 中,这个目录默认在 /var/www/html 。

浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的

URL

Uniform Resource Locator, 统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的 一种简洁的表示,是互联网上标准资源的地址

网址格式:<协议>://< 主机或主机名 >:port/< 目录资源,路径 >

协议::http、https、ftp 等

主机地址或者主机名:主机地址就是服务器在因特网所在的 IP 地址。如果是主机名的话,那么就需 要域名解析了

端口号 (port):http 为 80,https 为 443 (IANA: 互联网数字分配机构)

0-1023: 永久地分配给固定的应用程序使用

1024-41951: 注册端口,但要求不是特别严格,分配给程序注册为某应用使用

41952-60000: 客户端程序随机使用的端口,动态端口,或私有端口

http 请求方法:

工作机制:

一次请求发送和对应的请求响应组成一次 HTTP 事务

在 http 通信中,每个 http 请求报文都包含一个方法,用以告诉 web 服务器端需要执行哪些具体的动 作,这些动作包括:获取指定 web 页面、提交内容到服务器、删除服务器上资源文件等。

表格

请求方法 协议版本 说明
GET 0.9 获取资源,可以理解为读取或者下载数据
HEAD 1.0 获取资源,和 GET 类似,不返回具体数据,只需要头信息
POST 1.0 向服务端提交数据,数据通常交由后端程序处理
PUT 1.1 向服务端提交数据,数据直接存储在服务器上
PATCH 1.1 对 PUT 方法的补充,用来对己知资源进行局部更新
DELETE 1.1 请求服务端删除指定资源
CONNECT 1.1 建立一个到服务端的隧道
OPTIONS 1.1 请求服务端返回对指定资源支持使用的请求方法
TRACE 1.1 追踪请求到达服务器中间经过的代理服务器

** 状态代码:** 由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值

1xx: 指示信息 -- 表示请求已接收,继续处理

2xx: 成功 -- 表示请求已被成功接收、理解、接

3xx: 重定向 -- 要完成请求必须进行更进一步的操作

4xx: 客户端错误 -- 请求有语法错误或请求无法实现

5xx: 服务器端错误 -- 服务器未能实现合法的请求

常见状态代码、状态描述的说明如下:

200 OK: 客户端请求成功

400 Bad Request: 客户端请求有语法错误,不能被服务器所理解

401 Unauthorized: 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使 用

403 Forbidden: 服务器收到请求,但是拒绝提供服务

404 Not Found: 请求资源不存在,举个例子:输入了错误的 URL

500 Internal Server Error: 服务器发生不可预期的错误

503 Server Unavailable: 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

HTTP 协议请求的工作流程:

  1. 建立连接:接受一个客户端请求,或者如果不希望与这个客户端建立连接,就将其关闭

  2. 接受请求:从网络中读取一条 HTTP 请求报文

  3. 处理请求:对请求报文进行解释,并采取行动

  4. 访问资源:从数据存储中读取报文中指定的资源

  5. 构建响应:创建带有正确头部的 HTTP 响应报文

  6. 发送响应:将响应回送给客户端

  7. 记录事务处理过程:将与已完成事务相关的内容记录到日志中

特点

4.1.6 www 服务器的类型

静态网站

仅提供用户浏览的单向静态网页,单纯是由服务器单向提供数据给客户端,Server 不需要与 client 端有互动,可以浏览网站,但是无法数据上传。 查询速度慢

动态网站

该站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过 "网页程序语 言" 来实现与用户互动的行为。常见的例如:PHP 网页程序语言,配合数据库系统来进行数据的读、 写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数 据库,变动的是数据库的内容,网页程序并没有任何改变。

另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码 (JavaScript) 传送 给客户端,客户端的浏览器如果提供 JavaScript 的功能,那么该程序就可以在客户端的计算机上面 工作了;另外一种可在客户端执行的就是 flash 动画格式,在这种动画格式内还可以进行程序设计

4.2 使用 nginx 搭建 web 网站

4.2.1 nginx 简介

概念

Nginx 是一款轻量级 HTTP 服务器,也是一款邮箱代理服务器,同时具备反向代理、通用 TCP/UDP 代理的功能

Nginx 可以运行在 x86、ARM 等多种平台上,同时支持 Linux、Windows 等主流的操作系 统

特点

・支持高并发

。单机 Nginx 可支持十万级的并发连接,经过优化后可最高支持百万级并发连接

・内存资源消耗低

。在同级 web 服务器中,Nginx 占用的内存最少,一万非活跃的 http keep-alive 连接仅消耗 2.5M 内存

・高扩展性

和 Apache 一样,Nginx 采用模块化设计,并支持非常丰富的第三方模块

・高可靠性

Nginx 采用 master-worker 模式,如果 worker 出现故障,master 可以快速开启一个新的 worker 来提供服 务

nginx 架构

・主进程:master

。检查 Nginx 配置是否正确

创建、监控 worker 进程的数量和状态

接收对 Nginx 的管理指令,并作出对应操作

・工作进程:worker

。处理客户端请求

接收 master 发来的指令,并做对应操作

注意:默认情况下,nginx 会建立和服务器 CPU 核心数相等的 worker 进程,woker 进程之间相互独 立,若一个进程故障不会影响其它进程

nginx 关键工作机制

抢占机制:当客户端发起请求时,会激活 accept_mutex 互斥锁,哪个 worker 抢占了该互斥锁,该 客户端的请求就由那个 worker 响应和处理

异步非阻塞模式:在传统事件处理模式下,如果所有的 worker 被客户端阻塞后,新来的客户就需要 等待,直到原来的客户端释放 worker 后才能被处理请求,在异步非阻塞模式下,底层使用了 linux 的 epoll 模型,就算 worker 被阻塞,新的客户端请求也会被正常处理

nginx 正向代理功能 (代理客户端)

图:

分析:它的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代 理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他 我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我,从网站的角度,只在代理服 务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代 理告不告诉网站。

理解:

  • ```bash

客户端 <一> 代理 <一> 服务端

A租房人(客户端) B房产中介(代理) C真实房东(服务端)

```

  • A租房人(客户端)想租C真实房东的房子,但不认识C真实房东(服务端)

  • B房产中介(代理)认识C真实房东(服务端),并且从C真实房东(服务端)租到了房

  • A租房人(客户端)通过B房产中介(代理)租到了C真实房东(服务端)的房

  • C真实房东(服务端)只知道房子租给了B房产中介(代理),并不知道A租房人(客户端)租了自己的房子

结论:正向代理 是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器 取得内容,客户端向代理发送一个请求并指定目标 (原始服务器), 然后代理向原始服务器转交请求 并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问 google 用 vpn 代理翻墙去访问 (用户知道要访问真正的服务器)

nginx 反向代理功能 (代理服务器)

图:

分析:反向代理正好相反,它也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的 目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际 ip 地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器 获取响应内容并返回客户端

・Nginx 反向代理的工作流程:

  1. 客户端向 Nginx 发送请求

2.Nginx 在收到客户端发送的请求后,将请求转发到后端服务器

  1. 后端服务器将客户端请求的资源回复给 Nginx

4.Nginx 将资源返回给客户端

・Nginx 反向代理通过位于 location 中的 proxy_pass 实现

・在反向代理的工作流程中,客户端向代理请求资源时使用的端口,可以和服务器提供服务的端口不一致

nginx 负载均衡功能

・Nginx 可以提供四层和七层的负载均衡

Nginx 的负载均衡功能通过位于 http 中的 upstream 实现

・Nginx 提供了多种负载均衡算法,如轮询、权重等

轮询算法下,Nginx 会轮流将请求发送给不同的服务器,使每个服务器都均等的提供服务

权重算法下,Nginx 会按照配置的权重比例,将请求发送服务器。性能较好的服务提供更多的服务,性能较好的服 务器将提供较少的服务

4.2.2 部署 Nginx

用 yum 的前提:

root@server \~# setenforce 0

root@server \~# systemctl stop firewalld

root@server \~# systemctl disable firewalld

root@server \~# yum install nginx -y

root@server \~# nginx -V # 查看版本,编译器、配置参数等信息

root@server \~# systemctl start nginx # 启动httpd

root@server \~# systemctl enable nginx # 设置开机启动

Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service →

/usr/lib/systemd/system/nginx.service.

root@server \~# systemctl status nginx # 查看状态,q键退出查看

root@server \~# ps -ef | grep nginx # 查看进程

root 1690 1 0 13:57 ? 00:00:00 nginx: master process

/usr/sbin/nginx

nginx 1691 1690 0 13:57 ? 00:00:00 nginx: worker process

nginx 1692 1690 0 13:57 ? 00:00:00 nginx: worker process

root 1726 1510 0 14:00 pts/0 00:00:00 grep --color=auto nginx

测试,Windows 中打开浏览器输入服务器 IP 地址

关于 yum 安装 Nginx;

用 ql 查哪个是 Nginx 的配置文件

启动文件:

4.2.3 常用命令

systemctl 系列

systemctl start nginx # 启动服务

systemcctl restart nginx # 重启服务

systemctl enable nginx # 开机启动

systemctl stop nginx # 停止服务

systemctl disable nginx # 取消开机启动

systemctl status nginx # 查看状态

nginx 自带命令

nginx # 启动nginx

nginx -s reload # 重新加载配置文件

nginx -s stop # 强行停止服务

nginx -s quit # 优雅停止服务,即所有请求处理完后退出服务

nginx -v # 查看版本号

nginx -t # 检查配置文件的语法错误,无错返回ok

-t,检测语法

4.2.4 nginx 配置文件

root@server \~# cd /etc/nginx # 服务目录

root@server nginx# yum install tree -y

root@server nginx# tree

conf.d

子配置文件目录

├── default.d

├── fastcgi.conf

├── fastcgi.conf.default

├── fastcgi_params

├── fastcgi_params.default

├── koi-utf # KOI8-R 编码(俄语)转换的映射文件

├── koi-win # # KOI8-R 编码(俄语)转换的映射文件

├── mime.types # 配置支持的媒体类型

├── mime.types.default # 样例文件

├── nginx.conf # 主配置文件

├── nginx.conf.default # 样例文件

├── scgi_params

├── scgi_params.default

├── uwsgi_params

├── uwsgi_params.default

└── win-utf # KOI8-R 编码(俄语)转换的映射文件

2 directories, 15 files

网页默认目录:/usr/share/nginx/html

访问日志:/var/log/nginx/access.log

错误日志:/var/log/nginx/error.log

4.2.5 主配置文件

root@server \~# vim /etc/nginx/nginx.conf

结构

服务器所支持的文件类型

分析

层级结构图

配置分析

main配置段(全局配置)

user nginx; # 运行的账户,默认即是nginx,可以不进行设置

worker_processes auto; # worker进程数,根据硬件调整,通常等于CPU数量或者2倍于CPU

error_log /var/log/nginx/error.log; # 错误日志存放目录

pid /run/nginx.pid; # 指定运行Nginx master主进程的pid文件存放路径

Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.

include /usr/share/nginx/modules/*.conf; # 导入的外部文件位置

events配置段,性能模块设置,其中可以设置时间处理模式等

events {

use epoll; # 使用epoll事件驱动模型,但不推荐配置它,让nginx自己选择

worker_connections 1024; # 每个进程的最大连接数量(并发数)

accept_mutex on # 默认是off关闭的,这里推荐打开

}

http配置段,包含全局块和server块,使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置

http {

log_format main 'remote_addr - remote_user $time_local "$request" '

'status body_bytes_sent "$http_referer" '

'"http_user_agent" "http_x_forwarded_for"';

以上定义日志格式

access_log /var/log/nginx/access.log main; # 访问日志存储位置

高效文件传输模式,默认开启

sendfile on;

tcp_nopush on; # 性能优化参数,数据是否立刻发送

tcp_nodelay on; # 性能优化参数,小数据包是否延迟发送

keepalive_timeout 65; # 超时时间

types_hash_max_size 4096; # 性能优化参数,影响散列表的冲率

include /etc/nginx/mime.types; # 可解析的静态资源类型

default_type application/octet-stream;

默认文件类型

Load modular configuration files from the /etc/nginx/conf.d directory.

See http://nginx.org/en/docs/ngx_core_module.html#include

for more information.

include /etc/nginx/conf.d/*.conf; # 加载子配置项

server配置段,虚拟主机设置

server {

listen 80 # 监听IPV4端口

listen :::80; # 监听IPV6端口

server_name _; # 访问的域名

root /usr/share/nginx/html; # 网页默认目录

Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf; # 子配置文件存储路径

location配置段,一般用来匹配不同的URI请求

location / {

root /usr/share/nginx/html; # 相对路径网站根目录

alias /usr/share/nginx/html/; # 绝对路径网站根目录

index index.html index.htm; # 默认首页文件

deny 172.168.22.11; # 禁止访问的ip地址,可以为all

allow 172.168.33.44; # 允许访问的ip地址,可以为all

autoindex on; # 开启目录文件列表

autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes

autoindex_localtime on; # 显示的文件时间为文件的服务器时间

charset utf-8,gbk; # 避免中文乱码

auth_basic "xxxx" # 加密网页验证时的提示信息

auth_basic_user_file / 路径/文件名 ; # 加密网页使用的密码验证文件

}

error_page 404 /404.html; # 404时返回给客户端的页面

location = /40x.html {

}

error_page 500 502 503 504 /50x.html; # 50x错误返回给客户端的页面

location = /50x.html {

}

}

Settings for a TLS enabled server. # https 虚拟主机定义

server {

listen 443 ssl http2; # 监听的IPV4端口

listen :::443 ssl http2;

server_name _;

root /usr/share/nginx/html; # 网页默认目录

ssl_certificate "/etc/pki/nginx/server.crt"; # 证书存储路径

ssl_certificate_key "/etc/pki/nginx/private/server.key"; # 密钥存储

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 10m;

ssl_ciphers PROFILE=SYSTEM;

ssl_prefer_server_ciphers on;

# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;

location = /40x.html {

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

}

}

}

注意

server_name 指令一般用于指定虚拟主机的域名,在匹配时有以下四种写法

精确匹配:server_name http://www.nginx.com ;

左侧匹配:server_name .http://nginx.com ;

右侧匹配:server_name www.nginx. ;

正则匹配: server_name ~^www.nginx.*$ ;

注:匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配

root 指令与 alias 指令区别

root 指令用于静态资源目录位置,它可以写在 http 、 server 、 location 等配置中,root 指 令定义的路径会与 URI 叠加产生最终访问路径,如:

location /image {

root /opt/nginx/static;

}

当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是

/opt/nginx/static/image/1.png

alias 也是指定静态资源目录位置,但只能访问指定的绝对路径,不会叠加目录,只能写在 location 中且末尾一定要添加 / , 如:

location /image {

alias /opt/nginx/static/image/;

}

#当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是

/opt/nginx/static/image/1.png

location 匹配路径

格式:

location = \| \~ \| \~\* \| \^\~ uri {

}

匹配规则:

= 精确匹配;

~ 正则匹配,区分大小写;

~* 正则匹配,不区分大小写;

^~ 匹配以某个字符串开头,不是正则匹配;

/ 通用匹配,如果没有其它匹配,任何请求都会匹配到

注:匹配优先级:= > ^~ > ~ > ~* > 不带任何字符。

示例

server {

listen 80;

server_name www.nginx-test.com;

只有当访问 www.nginx-test.com/match_all/ 时才会匹配

到/usr/share/nginx/html/match_all/index.html

location = /match_all/ {

root /usr/share/nginx/html;

index index.html;

}

当访问 www.nginx-test.com/1.jpg 等路径时会去

/usr/share/nginx/images/1.jpg 找对应的资源

location ~ \.(jpeg|jpg|png|svg)$ {

root /usr/share/nginx/images;

}

当访问 www.nginx-test.com/bbs/ 时会匹配上

/usr/share/nginx/html/bbs/index.html

location ^~ /bbs/ {

root /usr/share/nginx/html;

index index.html index.htm;

}

}

注意:

location / {

root html;

index index.html index.htm;

}

其/不是根目录而是统统都匹配到指定路径,而指定路径为html ,即nginx的默认网页目

录/usr/share/nginx/html

uri 中的斜线,如:

location /test 尾部无/

}

location /test/ {

}

不带 / 当访问 http://www.nginx-test.com/test 时,Nginx 先找是否有 test index.html ; 如果没有 test 目录,nginx 则会找是否有 test 文件。

带 / 当访问 http://www.nginx-test.com/test 时,Nginx 先找是否有 test 目录,如果有则找 test 目录下的 index.html , 如果没有它也不会去找是否存在 test 文件。

nginx.conf 配置文件的语法规则

  • 配置文件由指令与指令块构成
  • 每条指令以 ";" 分号结尾,指令与参数间以空格符号分隔
  • 指令块以 {} 大括号将多条指令组织在一起
  • include 语句允许组合多个配置文件以提升可维护性
  • 通过 # 符号添加注释,提高可读性
  • 通过 $ 符号使用变量
  • 部分指令的参数支持正则表达式,例如常用的 location 指令

二、零基础小白趣味解读 + RHCE 核心考点拆解

我会用「生活化类比 + 大白话解释 + 考点划重点」的方式,把上面的硬核内容拆解得明明白白,哪怕你是第一次接触 Linux 和 Web 服务,也能一眼看懂。

模块 1:先搞懂 Web 服务到底是个啥?

原文里说 Web 服务是 "被动访问的服务程序,通过 HTTP/HTTPS 传内容",咱们用一个超通俗的类比:

Web 服务 = 线上餐厅

  • 你的浏览器 = 吃饭的顾客
  • Web 服务器 = 餐厅(后厨 + 前台)
  • 网页 / 图片 / 视频 = 餐厅里的菜品
  • HTTP/HTTPS 协议 = 顾客和餐厅之间的「点餐规矩」
  • 你在浏览器输的网址 = 餐厅的详细地址

顾客(浏览器)只有先给餐厅(Web 服务器)发点餐请求,餐厅才会做菜、把菜送过来;餐厅不会主动给你送菜,这就是原文说的「被动访问」。

1. 四大常见 Web 服务程序,怎么选?

RHCE 考试核心考Nginx,但这四个的区别必须记牢,选择题高频考点:

表格

程序 大白话定位 核心特点 适用场景
IIS Windows 系统专属 "私房菜馆" 只能在 Windows 用,图形化好,微软自家产品 Windows 服务器搭网站、FTP 服务
Nginx 网红高效快餐店 占地方小、出餐快、能同时接待超多顾客(高并发),不挑系统 高并发网站、反向代理、负载均衡,互联网公司首选
Apache 老牌连锁大饭店 稳、安全、哪里都能开(跨平台),功能全,市场占有率最高 传统企业网站、稳定优先的业务
Tomcat Java 专属特色小吃店 轻量,专门处理 Java 相关的网页代码,常和 Apache/Nginx 搭配 Java 程序开发、调试 JSP 代码

2. 网站的 "房子" 怎么选?(服务器主机类型)

搭网站就像开店,得先选个商铺,原文里的 4 种主机,就是 4 种不同的商铺类型,小白再也不懵:

  • 虚拟主机:商场里的共享摊位,只给你一个小格子放东西,水电物业全包,便宜,但你只能用这一小块地方,不能改商场规则,适合个人小网站。
  • VPS:商场里隔出来的独立小门面,有自己的门、水电、装修,你可以自己改里面的布局,和隔壁摊位互不影响,适合小型企业网站。
  • 云服务器 (ECS):连锁商圈的弹性商铺,你今天需要 100 平就给你 100 平,明天需要 200 平就扩 200 平,而且商圈有多个备份,就算一个门店坏了,其他门店还能营业,稳得很,现在绝大多数网站都用这个。
  • 独立服务器:你自己买 / 租了一整栋楼,整栋楼全给你用,硬件、规则全你说了算,适合流量超大的大中型网站。

3. 网址、HTTP 协议,到底是什么?

这部分是网络基础,也是 RHCE 的底层考点,面试也常问。

(1)URL 网址,就是餐厅的完整地址

原文给的格式:<协议>://<主机或主机名>:port/<目录资源,路径>

咱们拆解开,拿https://www.baidu.com:443/index.html举例:

  • https://:协议,相当于「我要走什么路去餐厅」,http 是普通公路,https 是加密高速公路,更安全。
  • www.baidu.com:主机名 / 域名,相当于餐厅的名字,需要 DNS(导航)翻译成具体的门牌号 IP 地址。
  • :443:端口号,相当于餐厅的大门,http 默认门是 80 号,https 默认门是 443 号,不写就用默认门。
  • /index.html:资源路径,相当于你要去餐厅的哪个窗口、点哪道菜。

补充端口号小知识(考点):

  • 0-1023:知名端口,固定分给常用服务,比如 80 (http)、443 (https)、22 (ssh),普通人不能随便用。
  • 1024-41951:注册端口,给软件申请用的。
  • 41952-60000:动态端口,你浏览器访问网站时,自己随机用的临时端口。

(2)HTTP 请求方法:顾客对餐厅的需求

每个请求方法,就是顾客给餐厅说的话,RHCE 常考 GET 和 POST 的区别,必须记牢:

  • GET:"给我上这道菜!",纯拿数据、看内容,不修改服务器上的东西,比如你打开百度首页,就是发 GET 请求。
  • POST:"这是我的订单信息,帮我存起来!",给服务器提交数据,比如你登录账号、发评论,用的就是 POST。
  • HEAD:"我就问问这道菜有没有,不用给我上菜",只看响应头,不拿具体内容,用来测试链接是否有效。
  • DELETE:"把我之前的订单删掉!",让服务器删除资源。

(3)HTTP 状态码:餐厅给你的回复

状态码就是餐厅给你的反馈,三位数,第一位决定了反馈类型,200、403、404、500、502 是必考必记,日常上网也天天见:

  • 1xx:"收到你的点餐了,正在处理",临时信息,很少见。
  • 2xx:"你的订单成功了!",最常见的就是 200 OK,请求完全成功。
  • 3xx:"这家店搬家了,我给你新地址",重定向,比如你输旧网址跳转到新网址。
  • 4xx:"你这边出问题了!",客户端错误:
    • 403:"餐厅不让你进",服务器拒绝了你的请求,没权限。
    • 404:"你点的菜,菜单上没有",网址输错了,或者资源被删了,全网最常见的错误码。
  • 5xx:"餐厅后厨出问题了!",服务器端错误:
    • 500:"后厨炸锅了,不知道哪里出问题了",服务器内部代码报错。
    • 502:"前台给后厨传话,后厨给了个无效回复",网关错误,代理和后端服务器通信出问题了。
    • 503:"餐厅今天暂停营业,过会儿再来",服务器暂时用不了。

(4)HTTP 请求完整流程:从点餐到上菜的全过程

原文给了 7 步,咱们用点餐类比,一秒懂:

  1. 建立连接:顾客走到餐厅门口,推开门(和服务器建立 TCP 连接)。
  2. 接受请求:服务员接过顾客的菜单(服务器读取 HTTP 请求报文)。
  3. 处理请求:服务员看明白顾客要什么菜、有什么要求(解析请求报文)。
  4. 访问资源:服务员去后厨 / 仓库拿对应的食材、做菜(读取服务器里的网页、图片等资源)。
  5. 构建响应:厨师把菜做好,装好盘,配上餐具(生成带响应头的 HTTP 报文)。
  6. 发送响应:服务员把菜端给顾客(把响应内容发给浏览器)。
  7. 记录日志:收银台把这笔订单记下来,谁、什么时候、点了什么菜(记录访问日志)。

(5)HTTP 的核心特点

  • 单向连接:只能顾客主动找餐厅,餐厅不能主动找顾客。
  • 无状态协议:这次你点完餐,餐厅就忘了你是谁,下次来还要重新自我介绍。所以网站才需要 Cookie/Token 来记住你的登录状态。
  • 明文传输:http 是说话不加密,路上谁都能听见;https 是加密说话,只有你和餐厅能听懂。

4. 静态网站 vs 动态网站

表格

类型 大白话解释 特点 例子
静态网站 餐厅的固定菜单,印好了就不变,所有人看的都一样 只能看,不能互动,内容固定,访问快 企业官网、个人介绍页面,只有 html + 图片
动态网站 可以扫码点餐、下单、改地址,每个人看到的内容不一样 能和用户互动,需要后端程序 + 数据库,内容实时变 淘宝、抖音、博客留言板、论坛

模块 2:Nginx 核心知识 + RHCE 实战考点

Nginx 是 RHCE 考试的重中之重,实操题几乎必考,咱们从原理到部署、配置,全给你讲透。

1. Nginx 为什么这么火?核心特点

原文里的 4 大特点,用大白话讲就是:

  • 高并发:一个小门店,能同时接待几万甚至几十万顾客,这是 Nginx 最核心的优势。
  • 占内存少:一万个闲置的连接,只占 2.5M 内存,相当于开超大餐厅,房租还特别便宜。
  • 高可靠:店长 + 服务员模式,一个服务员摔倒了,店长立刻叫新的服务员顶上,餐厅不会停业。
  • 扩展性强:可以装各种插件,既能当餐厅,还能当中介、当接待台,功能超多。

2. Nginx 的架构:店长 + 服务员模式

这是理解 Nginx 运行的核心,原文的 master-worker 架构,类比一下:

  • master 主进程 = 店长:不直接接待顾客,只负责 3 件事:① 检查餐厅规矩(配置文件)对不对;② 招服务员、管服务员,谁出问题立刻换;③ 接收老板的指令(管理命令),给服务员传达。
  • worker 工作进程 = 服务员:直接接待顾客、处理请求,默认有多少个 CPU 核心,就有多少个服务员,服务员之间互不影响,一个服务员出错,其他的还能正常工作。

两个关键工作机制,面试常问:

  • 抢占机制:门口来了个顾客,服务员们抢一个叫 "accept_mutex" 的接待牌,谁抢到了,这个顾客就全程由谁服务,避免多个服务员抢同一个顾客乱套。
  • 异步非阻塞模式:服务员给顾客点完单,不会站在厨房等菜,而是立刻去接待下一个顾客;后厨菜做好了,再通知服务员来端菜。这样哪怕有 1000 个顾客,几个服务员也能忙得过来,不会卡死。

3. 正向代理 vs 反向代理,小白再也不混了

这是 Nginx 最核心的功能之一,也是 RHCE 实操高频考点,很多人学了很久都分不清,咱们用原文的租房中介类比,再补个更通俗的:

(1)正向代理:帮客户端办事,藏住客户端

类比:你想买国外的东西,自己买不了,找了个代购,你告诉代购要买什么,代购去国外买了寄给你。卖家只知道代购,不知道是你买的。

  • 核心:代理的是客户端,客户端知道自己要访问的真正服务器,服务器不知道真正的客户端是谁。
  • 常见场景:VPN 翻墙、公司内网代理访问外网。

(2)反向代理:帮服务器办事,藏住服务器

类比:你去连锁奶茶店点单,只和前台收银员说话,收银员把你的订单发给后厨哪个窗口,你不知道,也不用管,最后前台把奶茶给你就行。

  • 核心:代理的是服务器端,客户端只知道代理服务器,不知道真正提供服务的后端服务器在哪。
  • 常见场景:隐藏后端服务器 IP、安全防护、配合负载均衡。

4. 负载均衡:不让一个后厨忙死

Nginx 的负载均衡,就是前台收银员合理分配订单,不让一个厨师忙到炸,其他厨师闲着。

  • 轮询算法:订单轮流发,第一个订单给厨师 1,第二个给厨师 2,第三个给厨师 3,循环往复,大家工作量一样。
  • 权重算法:手艺好、出餐快的厨师(性能好的服务器),多分配订单;手艺慢的,少分配,按比例来。
  • RHCE 考点:负载均衡靠upstream配置块实现,反向代理靠proxy_pass实现,实操题必考。

5. Nginx 部署全流程,每一步干嘛讲清楚

原文给了 yum 部署的命令,咱们拆解每一步的作用,小白照着敲也不会错,RHCE 实操第一步就是这个:

(1)前置准备:关掉 "拦路的保安"

bash

运行

setenforce 0 # 临时关闭SELinux,Linux的安全机制,不关掉会限制网站访问

systemctl stop firewalld # 临时关闭防火墙,不然浏览器访问不了80端口

systemctl disable firewalld # 永久关闭防火墙,开机不会自启

注意:RHCE 考试里,不建议直接关防火墙,更规范的做法是给防火墙加放行规则,比如firewall-cmd --add-service=http --permanent && firewall-cmd --reload,考试这么写更稳妥。

(2)安装 Nginx

bash

运行

yum install nginx -y # 用yum一键安装Nginx,-y是自动确认所有安装步骤

补充:RHEL7/CentOS7 的光盘里默认没有 Nginx,需要先装 epel 扩展源,命令是yum install epel-release -y,再装 Nginx。

(3)启动服务 + 设置开机自启

bash

运行

systemctl start nginx # 启动Nginx服务,相当于餐厅开门营业

systemctl enable nginx # 设置开机自启,相当于服务器重启后,餐厅自动开门

(4)验证安装

bash

运行

nginx -v # 查看Nginx版本,能输出版本号就是安装成功了

systemctl status nginx # 查看服务状态,显示active(running)就是正常运行

ps -ef | grep nginx # 查看进程,能看到master进程和worker进程,就是正常的

(5)测试访问

在浏览器里输入服务器的 IP 地址,能看到 Nginx 的默认欢迎页,就说明部署成功了!

6. Nginx 常用命令,考试 / 实战天天用

分两类,记熟这几个,足够应对 99% 的场景:

(1)systemctl 系统服务命令(推荐)

表格

命令 作用 常用场景
systemctl start nginx 启动 Nginx 安装后第一次启动
systemctl restart nginx 重启 Nginx 改了核心配置,需要重启生效
systemctl reload nginx 平滑重载配置 改了配置,不重启服务,不中断正在处理的请求,生产环境优先用这个
systemctl stop nginx 停止服务 要关闭网站服务
systemctl status nginx 查看服务状态 排查服务有没有启动、有没有报错
systemctl enable nginx 设置开机自启 服务器重启后自动运行,必做

(2)Nginx 自带命令

表格

命令 作用 常用场景
nginx -t 检查配置文件语法 改完配置文件,先执行这个,确认没写错,再重载 / 重启,避免服务崩了,考试必用!
nginx -s reload 平滑重载配置 和 systemctl reload 效果一样
nginx -s quit 优雅停止服务 等所有正在处理的请求都完成,再关闭服务,生产环境用这个,不影响用户
nginx -s stop 强制停止服务 直接关掉所有进程,不管有没有正在处理的请求
nginx -v 查看版本 确认安装的版本
nginx -V 查看详细版本 + 编译参数 看安装了哪些模块

7. Nginx 配置文件全拆解,考试改配置不懵

这是 RHCE 实操的核心,所有的网站配置、反向代理、负载均衡,都靠改配置文件实现,咱们一层一层拆明白。

(1)先搞懂配置文件在哪?关键目录记牢

  • 主配置文件:/etc/nginx/nginx.conf,Nginx 的核心规矩都在这里。
  • 子配置文件目录:/etc/nginx/conf.d/,里面写.conf结尾的配置文件,会自动加载,建议不同的网站写不同的子配置文件,好维护。
  • 网页默认根目录:/usr/share/nginx/html,你把写好的 index.html 放这里,浏览器就能访问到。
  • 访问日志:/var/log/nginx/access.log,谁、什么时候、访问了什么、成功还是失败,全记在这里,排查问题必看。
  • 错误日志:/var/log/nginx/error.log,Nginx 启动报错、配置写错了、运行出问题,都在这里看,排错第一看这个!

(2)主配置文件的四层结构,一层都不能错

Nginx 的配置是层级结构,就像公司组织架构,从上到下是:

main全局块 → events块 → http块 → server块 → location块

  • 越靠里的块,优先级越高,里面的配置会覆盖外面的。

咱们逐块拆解,每一行配置是干嘛的,全给你讲明白:

① main 全局块:整个餐厅的整体规矩

写在 nginx.conf 最顶部,events{}外面的内容,对整个 Nginx 都生效:

nginx

user nginx; # 运行Nginx的用户,相当于餐厅的员工身份,默认nginx就行

worker_processes auto; # 服务员数量,auto自动和CPU核心数一致,性能最优,不用改

error_log /var/log/nginx/error.log; # 错误日志的存放位置,排错必看

pid /run/nginx.pid; # 店长(master进程)的工号文件,系统用来管理进程

include /usr/share/nginx/modules/*.conf; # 加载第三方模块的配置

② events 块:服务员的工作能力设置

专门用来优化 Nginx 的性能,影响并发能力:

nginx

events {

worker_connections 1024; # 每个服务员(worker进程)最多能同时接待多少个顾客,默认1024,可根据服务器配置调大

accept_mutex on; # 开启接待牌抢占机制,避免多个服务员抢同一个顾客,推荐打开

use epoll; # 用epoll事件模型,Linux下最高效的模式,Nginx会自动选,一般不用手动写

}

考点:Nginx 最大并发数 = worker 进程数 × worker_connections,比如 2 核 CPU,1024 连接,最大并发就是 2×1024=2048。

③ http 块:餐厅的整体服务规则

整个 HTTP 服务的核心配置,里面可以包含多个 server 块,所有网站的全局配置都写在这里:

nginx

http {

定义访问日志的格式,谁、什么时候、访问了什么、状态码、用的什么浏览器,全记下来

log_format main 'remote_addr - remote_user $time_local "$request" '

'status body_bytes_sent "$http_referer" '

'"http_user_agent" "http_x_forwarded_for"';

access_log /var/log/nginx/access.log main; # 访问日志的存放位置,用上面定义的main格式

sendfile on; # 开启高效文件传输,必开,提升静态文件访问速度

tcp_nopush on; # 性能优化,攒够一定数据再发送,提升效率

tcp_nodelay on; # 小数据包不延迟,立刻发送,和上面的搭配用

keepalive_timeout 65; # 客户端和服务器的连接保持时间,超时自动断开

types_hash_max_size 4096; # 优化文件类型识别的性能

include /etc/nginx/mime.types; # 加载支持的文件类型,比如html、图片、视频,Nginx知道该怎么处理这些文件

default_type application/octet-stream; # 默认文件类型,遇到不认识的文件,就当成下载文件处理

include /etc/nginx/conf.d/*.conf; # 加载子配置文件,conf.d目录里所有.conf结尾的文件都会被读进来,重点!

里面可以写多个server块,每个server块就是一个网站(虚拟主机)

server {

一个网站的具体配置

}

}

④ server 块:一个独立的网站 / 门店

每个 server 块,就对应一个网站,比如你要搭a.comb.com两个网站,就写两个 server 块,RHCE 虚拟主机配置必考。

nginx

server {

listen 80; # 监听的端口,http默认80,https默认443,相当于门店的门牌号

listen :::80; # 监听IPv6的80端口,不用可以删掉

server_name www.test.com; # 网站的域名,相当于门店的名字,用户输这个域名,就会匹配到这个server块

root /usr/share/nginx/test; # 这个网站的网页文件放在哪个目录,相当于门店的后厨仓库

charset utf-8; # 字符集,避免中文乱码

里面可以写多个location块,匹配不同的访问地址,相当于门店里的不同窗口

location / {

匹配根路径的请求,比如访问www.test.com/,就会进这个location

index index.html index.htm; # 默认首页,访问根路径,就返回这个文件

}

错误页面配置

error_page 404 /404.html; # 404错误时,返回/404.html这个页面

error_page 500 502 503 504 /50x.html; # 服务器错误时,返回50x.html

}

⑤ location 块:匹配具体的访问请求,最灵活的部分

location 是 Nginx 的灵魂,反向代理、静态资源处理、访问控制,全靠它,RHCE 实操必考,重点中的重点!

首先记牢匹配优先级(必背,考试常考):

精确匹配 = > 前缀匹配 ^~ > 正则匹配 ~(区分大小写) > 正则匹配 ~*(不区分大小写) > 普通前缀匹配 > 通用匹配 /

举几个常用例子,一看就懂:

  1. 精确匹配 =

nginx

location = /login {

只有用户访问www.test.com/login的时候,才会匹配这个,多一个字符都不行,优先级最高

}

  1. 正则匹配~(区分大小写)

nginx

location ~ \.(jpg|png|gif)$ {

匹配所有以.jpg、.png、.gif结尾的请求,也就是所有图片,区分大小写,.JPG就匹配不上

root /data/images; # 图片放在这个目录里

expires 7d; # 图片缓存7天,优化访问速度

}

  1. 前缀匹配 ^~

nginx

location ^~ /bbs/ {

只要访问的地址以/bbs/开头,就匹配这个,比如www.test.com/bbs/1.html,优先级比正则高

root /data/bbs;

}

  1. 通用匹配 /

nginx

location / {

所有没被其他location匹配到的请求,都会进这里,相当于兜底窗口

root /usr/share/nginx/html;

index index.html;

}

(3)高频易错点:root 和 alias 的区别,90% 的新手都踩过坑

这两个都是用来指定静态资源的目录,但用法完全不一样,RHCE 考试写错了,网站就会报 404,必须记死:

  • root:路径拼接,location 里的路径会拼到 root 定义的路径后面。

例子:

nginx

location /image {

root /opt/static;

}

用户访问www.test.com/image/1.png,Nginx 实际去找的路径是:/opt/static/image/1.png(把 /image 拼到了后面)。

  • alias :路径替换,location 里的路径会被 alias 定义的路径替换掉,必须以 / 结尾

例子:

nginx

location /image {

alias /opt/static/image/;

}

用户访问www.test.com/image/1.png,Nginx 实际去找的路径是:/opt/static/image/1.png(直接替换,不会重复拼接)。

一句话总结:root 是拼接,alias 是替换,alias 结尾必须加 /。

(4)location 里的 /,加不加区别超大

新手很容易忽略这个斜线,写错了就会匹配不到,或者跳转异常,记住规则:

  • location /test(不带 /):用户访问 /test 时,Nginx 会先找有没有 test 目录,有就找目录里的 index.html;没有目录,就找有没有叫 test 的文件。
  • location /test/(带 /):用户访问 /test 时,Nginx 只会找 test 目录里的 index.html,就算有叫 test 的文件,也不会理。

8. 配置文件语法规则,别犯低级错误

RHCE 考试里,很多人不是不会写配置,而是语法写错了,导致服务启动失败,这几条必须记牢:

  1. 每一条配置指令,结尾必须加英文分号;,少一个分号,配置就会报错,nginx -t 会检查出来。
  2. 指令块用大括号 {} 包裹,大括号前后要有空格,左括号不换行、右括号单独一行,规范写法,不容易错。
  3. 注释用 **#** 开头,# 后面的内容,Nginx 不会执行,用来写备注。
  4. 改完配置文件,一定要先执行 nginx -t 检查语法,确认 ok 了,再 reload 重载,不然配置错了,会导致服务重启失败,线上就出事故了!

结尾:RHCE 备考重点总结

这一章的内容,RHCE 考试里,实操题占比极高,核心考点给你划出来,备考优先掌握:

  1. Nginx 的 yum 部署、服务启停、开机自启配置。
  2. 虚拟主机配置(基于域名、端口的虚拟主机)。
  3. location 匹配规则、root 和 alias 的区别。
  4. 反向代理配置,配合后端服务的转发。
  5. 负载均衡配置(轮询、权重算法)。
  6. 访问控制(allow/deny)、日志配置、错误页面配置。

理论题高频考点:

  1. 常见 Web 服务程序的区别(IIS、Nginx、Apache、Tomcat)。
  2. HTTP 协议的请求方法、状态码、核心特点。
  3. 正向代理和反向代理的区别。
  4. Nginx 的 master-worker 架构、工作机制。
相关推荐
贺国亚6 小时前
Multi-Agent与Multi-Task编排架构
架构
zh路西法6 小时前
【navigation2全局路径更新频率修正】行为树框架的巧妙利用
linux
曲幽6 小时前
FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好
python·fastapi·web·jwt·oauth2·user·authentication
苏宸啊7 小时前
IPC管道
linux·c++
bush47 小时前
嵌入式linux学习记录十,定时器
linux·嵌入式
峥无7 小时前
Linux进程信号:从基础概念到内核底层原理
linux·运维·服务器·信号处理
广州灵眸科技有限公司7 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 开发(编译)方式说明
linux·服务器·单片机·嵌入式硬件·电脑
北山有鸟8 小时前
用开发板的.config替换ubuntu中内核源码目录的.config
linux·运维·ubuntu
张忠琳8 小时前
【SR-IOV cni】(Part 4) SR-IOV Network Device Plugin 3.11.0 — 超深度架构分析
网络·云原生·kubernetes·cni·sriov
jcbut8 小时前
离线安装dify 1.7
linux·运维·dify