Web 即全球广域网,也称为万维网,它是一种基于 HTTP 协议,通过互联网访问的信息服务系统,由无数的网页、网站组成,能提供如信息浏览、资源下载、在线交互等多种功能 。Nginx 是一款高性能、轻量级的 Web 服务软件,以下是它与 Web 服务相关的介绍:
Nginx 的主要功能
- 静态 Web 资源服务器:Nginx 特别擅长处理和提供静态内容,像 HTML 文件、图片(PNG、JPG、GIF 等格式 )、JavaScript、CSS、文本文件(txt)等。凭借高效的事件驱动架构,在处理大量并发静态资源请求时,传输速度快、响应时间短。比如电商网站的产品图片、样式文件等静态资源,可由 Nginx 高效提供服务。
- HTTP/HTTPS 协议反向代理:能接受客户端的 HTTP/HTTPS 请求,再转发给后端服务器或服务。还能基于 URL 内容决定请求转发去向,实现负载均衡、内容缓存或增强安全性等 。例如,将用户对不同商品页面的请求,转发到对应的后端服务器处理。同时,Nginx 可作为 HTTPS 请求的终止点,处理 SSL/TLS 加密和解密,再以 HTTP 方式转发到后端服务器。
- 反向代理动态资源请求:通过与 FastCGl、uWSGI、SCGI 等协议集成,处理动态内容请求。如与 PHP - FPM 配合处理 PHP 动态请求,或与 Python 应用(Django、Flask)的 uWSGI 守护进程协作,将客户端请求转发处理后,再把生成的动态内容返回给客户端。
- TCP/UDP 协议请求转发:在传输层(OSI 模型第 4 层),Nginx 支持 TCP 和 UDP 协议的反向代理。比如处理数据库请求(MySQL、PostgreSQL)、邮件服务(SMTP)等 TCP 流量,以及 DNS、VOIP 服务等 UDP 请求 ,并支持负载均衡和故障转移。
Nginx 的特点
- 模块化设计:采用模块化架构,可加载第三方模块扩展功能,像添加 Lua 脚本支持、Redis 缓存等;用户还能按需定制,去除不必要功能,减少内存占用、提升性能。
- 高可靠性:处理大量并发连接时稳定,不易崩溃或致服务器过载;具备自动跳过错误后端服务器的容错机制。
- 支持热部署:能在不中断服务时重新加载配置文件、升级软件版本或更换日志文件,保障在线服务可用性和连续性。
- 低内存消耗:内存管理高效,在众多保持活跃的连接(keep - alive 连接)情况下,非活动连接内存占用极低,系统资源利用率高。
- 事件驱动等技术支持:使用事件驱动模型处理网络请求,配合异步 I/O(AIO)、内存映射文件 I/O(Mmap)、sendfile 系统调用等,高效处理并发连接,避免阻塞,提升文件操作和数据传输效率。
Nginx 的应用场景
- Web 服务器:作为静态文件的 Web 服务器,高效处理大量并发连接,快速提供静态内容,适用于企业官网、博客等静态资源占比较大的网站。
- 反向代理服务器:将客户端请求转发到后端服务器,同时实现负载均衡、缓存、压缩、SSL/TLS 终结等功能,提升网站性能和安全性,常用于大型网站和应用系统。
- 负载均衡:通过多种负载均衡算法(轮询、最少连接、IP 哈希等),将流量分配到多个后端服务器,分散负载,提高系统可用性和扩展性,应对高访问量场景。
- 内容缓存:缓存动态和静态内容,减少对后端服务器的请求,提高响应速度、降低负载,比如缓存热门新闻页面内容。
Nginx 与 Apache 的区别
- 架构与性能:Nginx 采用异步非阻塞机制,一个进程可处理多个连接,抗并发能力强,单台物理服务器可支持 30000 - 50000 个并发请求;Apache 采用同步阻塞 + 多进程 / 线程模型,一个连接对应一个进程,高并发下性能不如 Nginx ,资源占用较多。
- 资源消耗:Nginx 使用 C 语言编写,内存和 CPU 资源消耗少;Apache 功能丰富但架构和模块设计导致其在相同 Web 服务场景下,资源占用更高。
- 配置复杂度:Nginx 配置简洁,使用场景多;Apache 配置相对复杂。
Nginx 的安装与配置(以 Linux 系统为例)
2. HTTPS 的工作原理(SSL/TLS 加密增强)
HTTPS 并非独立协议,而是在 HTTP 基础上增加了 SSL/TLS 加密层(TLS 是 SSL 的升级版,目前主流使用 TLS 1.2/1.3),核心是通过 “加密 + 认证” 解决 HTTP 的安全风险,关键步骤包括 SSL/TLS 握手 和 HTTP 数据传输:
(1)SSL/TLS 握手(核心安全环节)
握手阶段的目标是:① 验证服务器身份;② 协商加密算法;③ 生成会话密钥(用于后续数据加密),步骤如下(以 TLS 1.2 为例):
(2)HTTP 数据传输
握手完成后,后续的 HTTP 请求 / 响应数据会用 对称会话密钥 加密(对称加密效率高,适合大量数据传输),传输过程中即使被拦截,黑客也无法解密(无会话密钥),同时还会通过 “消息摘要” 校验数据完整性(防止篡改)。
三、SSL/TLS 证书的作用
HTTPS 依赖 SSL/TLS 证书实现 “身份认证”,证书由 权威 CA 机构(如 Let's Encrypt、Symantec)签发,包含以下核心信息:
四、应用场景差异
1. HTTP 的适用场景
2. HTTPS 的适用场景
五、关键总结
- 编译安装步骤:
- 关闭防火墙和 SELinux:执行
systemctl stop firewalld
和systemctl disable firewalld
关闭防火墙,并使用setenforce 0
临时关闭 SELinux。 - 安装依赖包:如
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
,为 Nginx 配置及运行提供所需库和头文件。 - 创建运行用户、组:例如
useradd -M -s /sbin/nologin nginx
,创建专门用户运行 Nginx,控制访问权限。 - 编译安装:先解压 Nginx 源码包,如
tar zxvf nginx-1.12.0.tar.gz -C /opt/
,进入解压目录cd /opt/nginx-1.12.0/
,通过./configure
命令配置参数(指定安装路径、运行用户等),再执行make
和make install
完成编译安装。 - 添加系统服务:可通过脚本方式管理服务,也可在
/lib/systemd/system/
目录下创建服务配置文件,如nginx.service
,设置服务描述、启动命令、重启命令等,然后使用systemctl start nginx.service
启动服务,并通过systemctl enable nginx.service
设置开机自启。 - 主配置文件:Nginx 主配置文件通常是
/usr/local/nginx/conf/nginx.conf
,包含全局配置(设置运行用户、工作进程数量等)、I/O 事件配置(选择 I/O 模型、设置每个进程处理连接数 )、HTTP 配置(配置代理、缓存、日志等,包含 server 块,用于配置虚拟主机相关参数;location 块,用于配置匹配的 url )等模块。
- 关闭防火墙和 SELinux:执行
二;HTTP与THHPS的协议
HTTP(HyperText Transfer Protocol,超文本传输协议)和 HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是 Web 服务中用于客户端(如浏览器)与服务器之间传输数据的核心协议,二者的核心差异在于 “安全性”,但在工作原理、应用场景等方面也存在显著区别。以下从多个维度详细解析:
一、核心定义与本质区别
维度 HTTP HTTPS 核心定位 无加密的明文传输协议,用于普通数据交换 HTTP + SSL/TLS 加密层,提供安全传输 数据安全性 明文传输,数据易被拦截、篡改、伪造 加密传输,数据经过 “加密 + 认证 + 完整性校验” 端口号 默认使用 80 端口 默认使用 443 端口 证书要求 无需任何证书 必须部署 SSL/TLS 证书(需权威机构签发) 传输效率 无加密开销,传输速度略快 需额外完成 SSL/TLS 握手,有轻微性能损耗 浏览器标识 地址栏无 “锁形” 图标,可能提示 “不安全” 地址栏显示 “锁形” 图标,提示 “安全” 二、工作原理对比
1. HTTP 的工作原理(简单明文传输)
HTTP 基于 请求 - 响应模型,传输过程完全明文,无任何安全防护,步骤如下:
- 建立连接:客户端(如浏览器)通过 TCP 与服务器的 80 端口建立连接(三次握手);
- 发送请求:客户端向服务器发送 HTTP 请求(如 GET/POST 方法,包含请求头、请求体),数据以明文形式传输;
- 服务器响应:服务器处理请求后,返回 HTTP 响应(包含响应头、响应体,如 HTML 页面、图片等),数据同样明文传输;
- 断开连接:传输完成后,TCP 连接断开(四次挥手)。
- 客户端 Hello:客户端向服务器发送 “支持的 TLS 版本、加密算法列表、随机数 A”;
- 服务器 Hello:服务器确认 TLS 版本和加密算法,返回 “随机数 B、服务器 SSL/TLS 证书(含公钥)”;
- 客户端验证证书:客户端通过内置的 “权威证书机构(CA)列表” 验证服务器证书(防止伪造证书),确认服务器身份合法;
- 生成会话密钥:客户端用服务器证书中的 “公钥” 加密 “预主密钥”,发送给服务器;服务器用自身的 “私钥” 解密,得到 “预主密钥”;
- 协商会话密钥:客户端和服务器分别用 “随机数 A + 随机数 B + 预主密钥”,通过相同算法生成 对称会话密钥(后续数据传输用此密钥加密);
- 握手完成:双方确认会话密钥有效,SSL/TLS 握手结束。
- 服务器域名(确保证书与访问的域名匹配);
- 服务器公钥(用于加密 “预主密钥”);
- CA 机构的签名(防止证书被伪造,客户端通过 CA 公钥验证签名合法性)。
- 静态资源展示:如纯信息类网站(无用户交互、无敏感数据);
- 内部测试系统:如企业内网的测试平台(无需对外暴露,无安全风险);
- 低带宽场景:如物联网设备的简单数据上报(需降低传输开销)。
- 涉及敏感数据的场景:如电商网站(支付信息)、社交平台(账号密码)、网银系统(资金操作);
- 搜索引擎优化(SEO):谷歌、百度等搜索引擎优先收录 HTTPS 网站,排名更靠前;
- Progressive Web App(PWA):PWA 应用强制要求使用 HTTPS;
- 所有需要用户信任的场景:如政府网站、医疗平台、教育系统(需证明服务器身份合法性)。
- 安全性是核心差异:HTTP 明文传输无安全保障,HTTPS 通过 SSL/TLS 实现 “加密 + 认证 + 完整性校验”,彻底解决中间人攻击风险;
- 成本与效率权衡:HTTPS 需申请证书(部分 CA 免费,如 Let's Encrypt),且握手阶段有轻微性能损耗,但对现代服务器而言可忽略不计,安全性收益远大于成本;
- 趋势不可逆:目前主流浏览器(Chrome、Firefox)已默认标记 HTTP 网站为 “不安全”,HTTPS 已成为 Web 服务的标配,所有涉及用户数据的场景都应强制使用 HTTPS。
三,Nginx的安装
编译安装(可自定义配置选项)
- 安装依赖包:Nginx 编译安装需要一些依赖环境,执行以下命令安装相关依赖。
bash
sudo yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
- 下载 Nginx 安装包:进入想要保存安装包的目录,然后从 Nginx 官方网站下载最新版本的安装包,例如:
bash
wget http://nginx.org/download/nginx-1.24.0.tar.gz
- 解压安装包:使用以下命令解压下载的压缩包。
bash
tar -zxvf nginx-1.24.0.tar.gz
- 进入解压目录:
bash
cd nginx-1.24.0
- 配置编译选项:可以根据需求配置编译参数,例如指定安装目录、启用某些模块等,常用的配置命令如下(将 Nginx 安装到 /usr/local/nginx 目录):
bash
./configure --prefix=/usr/local/nginx
- 编译和安装:依次执行以下命令进行编译和安装。
bash
make
sudo make install
- 启动 Nginx:安装完成后,进入安装目录的 sbin 目录,执行启动命令:
bash
/usr/local/nginx/sbin/nginx
- 设置环境变量(可选):为了方便在任意目录下都能执行 Nginx 命令,可以将 Nginx 的 sbin 目录添加到系统的环境变量中。编辑
.bashrc
文件:
bash
vi ~/.bashrc
在文件末尾添加以下内容(根据实际安装路径调整):
bash
export PATH=$PATH:/usr/local/nginx/sbin
保存并退出文件,然后执行以下命令使配置生效:
bash
source ~/.bashrc