Linux——web服务介绍和nginx编译安装

作者:不想画图日期:2025/11/24

文章目录

  • 前言
  • 一、web服务概念
    • 1、web概念
    • 2、web特点
    • 3、B/S架构模型
    • 4、web 请求与响应过程
    • 5、静态资源与动态资源
    • 6、总结
  • 二、http和https协议
    • 1、http和https的区别
    • 2、https握手流程
    • 3、http状态码
      • 3.1、汇总说明
        • 3.2、详细状态码说明
        • 3.3 总结
    • 4、常用http状态码
  • 三、Nginx概念
    • 1、nginx介绍
    • 2、nginx和apache差异
    • 3、nginx进程结构
      • 3.1、web请求处理机制
        • 3.2、nginx主进程和工作流的调用流程
        • 3.3、工作进程
  • 四、nginx编译安装流程
    • 1、获取Nginx资源
    • 2、关闭服务器防火墙和增强服务
    • 3、安装依赖包
    • 4、创建创建运行nginx用户(程序用户)和添加用户组。
    • 5、定制/编译/安装Nginx
    • 6、创建软链接(启动nginx不受路径限制)
    • 7、查看并启动nginx
    • 8、添加nginx系统服务
  • 五、扩展-使用信号操作nginx
  • 六、大白鲨抓包
  • 总结

前言

本文系统介绍Web服务基础、HTTP/HTTPS协议原理及Nginx核心知识,包含完整编译安装流程和实操演示,帮助读者快速掌握Web服务搭建与配置技能。


一、web服务概念

1、web概念

Web(World Wide Web,万维网)是运行在互联网之上的一个 超文本信息系统,它依赖于 HTTP/HTTPS 协议 实现浏览器与服务器之间的交互。

2、web特点

分布式:资源分布在世界各地的服务器上。
跨平台:只要有浏览器,就能访问资源。
无状态:每次 HTTP 请求都是独立的,服务器不会记住客户端状态(除非使用 Cookie/Session)。
扩展知识
cookie(客户端)和session(服务器)
步骤如下:
1、首次访问:服务器创建 Session 并通过 Set-Cookie 下发 SessionID,客户端保存;
2、 后续访问:浏览器自动携带 Cookie 中的 SessionID,服务器验证 Session 有效性;
3、退出登录:服务器销毁 Session,同时让客户端 Cookie 过期,终止关联。

3、B/S架构模型

Web 采用 B/S 架构(Browser/Server):
Browser(浏览器):用户的入口,发送请求、渲染页面。
Server(服务器):接收请求,返回所需资源或动态内容。

4、web 请求与响应过程

一次完整的 Web 访问过程包括以下步骤:

  1. 输入 URL:用户在浏览器输入 http://www.example.com
  2. DNS 解析:浏览器将域名解析为 IP 地址。
  3. 建立连接:浏览器与 Web 服务器建立 TCP 连接(3 次握手)。
  4. 发送请求:浏览器发起 HTTP 请求(GET/POST)。
  5. 服务器处理:
    Web 服务器处理静态资源请求
    动态请求转发到应用服务器(如 Tomcat、Django)
    应用服务器可能再查询数据库
  6. 返回响应:Web 服务器将结果打包成 HTTP 响应报文返回浏览器。
  7. 渲染页面:浏览器解析 HTML、加载 CSS/JS、渲染最终页面。

5、静态资源与动态资源

静态资源:不需要服务器额外处理,直接返回即可。
HTML、CSS、图片、视频、JS 文件
优点:速度快,压力小
动态资源:需要服务器端代码计算生成,再返回客户端。
PHP 脚本、Python Flask/Django、Java Servlet、Ruby
静态资源和动态资源对比
静态资源:用户请求 → Web服务器直接返回
动态资源:用户请求 → Web服务器 → 应用服务器运行代码 → 返回结果

6、总结

Web 是基于 B/S 架构 的信息交互方式。
核心是 请求-响应模型,通过 HTTP/HTTPS 协议传输数据。
Web 可提供 静态资源 和 动态资源。

二、http和https协议

1、http和https的区别

HTTP:明文传输,不安全。
HTTPS:在 HTTP 上加入 SSL/TLS 加密,防止中间人攻击

2、https握手流程

TLS 握手过程(建立安全通道)
流程:

  1. 客户端 Hello
    浏览器发起请求,告诉服务器自己支持哪些加密算法。
  2. 服务端 Hello + 证书
    网站返回 SSL 证书(证明身份),选择一种加密算法。
  3. 客户端验证证书
    浏览器检查证书是否可信(CA 颁发、没过期、域名匹配)。
  4. 协商密钥
    双方生成一个临时密钥,用于对称加密后续通信。
  5. 加密通信开始
    后续 HTTP 数据都通过加密通道传输。

3、http状态码

3.1、汇总说明

3.2、详细状态码说明




3.3 总结

HTTP 状态码就是服务器对你请求的“回话信息”,告诉你请求成功没、东西搬没搬、你有没有权限、或 者服务器出问题了。

4、常用http状态码

三、Nginx概念

1、nginx介绍

Nginx 是一个 高性能 Web 服务器,支持内容如下:
静态资源服务:可以直接把网页、图片、视频这些文件发给用户。
反向代理:用户访问你的服务器,Nginx 可以帮你把请求转发到后端真正处理请求的服务器。
负载均衡:当有很多后端服务器时,Nginx 可以智能分配流量,让每台服务器都不忙不过来。
高并发处理:用事件驱动的方式处理请求,能同时处理成千上万的用户请求,而不会占用太多资源。
优点:
轻量级,占用内存小
支持百万级并发访问
稳定可靠,开源且社区活跃

2、nginx和apache差异

Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;
Nginx避免子进程的概念,Apache是基于子进程的;
Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
Nginx支持热部署,Apache不支持热部署;
Nginx对于静态文件处理具有更高效率,Apache相对一般;
Nginx在反向代理场景具有明显优势,Apache相对一般。

3、nginx进程结构

3.1、web请求处理机制

多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。
多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来合客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可 以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

3.2、nginx主进程和工作流的调用流程

3.3、工作进程

1、所有 Worker 进程都是平等的
2、实际处理:网络请求,由 Worker 进程处理
3、Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源, 增加上下文切换的损耗
4、接受处理客户的请求 ,将请求依次送入各个功能模块进行处理
5、I/O调用,获取响应数据
6、与后端服务器通信,接收后端服务器的处理结果
7、缓存数据,访问缓存索引,查询和调用缓存数据
9、发送请求结果,响应客户的请求
10、接收主程序指令,比如重启、升级和退出等

四、nginx编译安装流程

1、获取Nginx资源

官方下载 https://nginx.org/download/nginx-1.20.2.tar.gz

2、关闭服务器防火墙和增强服务

systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 禁止防火墙开机自启
setenforce 0 # 临时关闭增强安全策略

  • setenforce 0 就是把 SELinux 从enforcing切到permissive(临时生效,重启后恢复);如果要永久关闭,得改配置文件/etc/selinux/config。

3、安装依赖包

nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

1# 安装依赖包
2yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
3# 查询软件包是否已经安装
4yum list installed gcc gcc-c++
5

4、创建创建运行nginx用户(程序用户)和添加用户组。

1useradd -M -s /sbin/nologin nginx
2

-M:“不创建家目录”
-s /sbin/nologin : 只能被程序调用,不能登入系统

5、定制/编译/安装Nginx

1cd /opt #去到根目录的opt目录
2./configure \ # 告诉系统,开始定制nginx
3--prefix=/usr/local/nginx \ # 所有文件(程序、配置、日志)存放路径
4--user=nginx \
5--group=nginx \  #Nginx运行用nginx用户/用户组的身份干活,不是用最高权限的root
6--with-http_stub_status_module \ #启用 Nginx 的状态监控功能,能看到 Nginx 当前接了多少请求、有多少连接
7--with-http_ssl_module # 相当于 “给房子装防盗门 + 加密锁”—— 启用 SSL 模块,让网站能支持https
8

运行结果:
有些not found 不影响审核通过。
只要三大核心依赖(PCRE 正则库、OpenSSL 加密库、zlib 压缩库)找到即可

检查通过:
这三行带 “+” 号的内容,直接说明 Nginx 编译必需的三大核心依赖(PCRE 正则库、OpenSSL 加密库、zlib 压缩库)都找到了,系统满足编译条件。

make && make install # 编译(make)和安装(make install)

6、创建软链接(启动nginx不受路径限制)

1ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		#让系统识别nginx的操作命令
2

可以通过echo P A T H 查看你的系统 PATH查看你的系统PATH查看你的系统PATH包含的目录,比如输出可能是:
/usr/local/sbin 是$PATH中的默认目录

7、查看并启动nginx

1nginx -t	# 用于测试配置文件语法与有效性的命令
2nginx # 启动
3

8、添加nginx系统服务

vim /etc/init.d/nginx

1#!/bin/bash
2#chkconfig: 35 99 20  
3#description:Nginx Service Control Script    # 这也是必须的 
4COM="/usr/local/nginx/sbin/nginx" 
5PID="/usr/local/nginx/logs/nginx.pid"
6case "$1" in
7start)
8  $COM
9;;
10
11stop)
12  kill -s QUIT $(cat $PID)
13;;
14
15restart)
16  $0 stop
17  $0 start
18;;
19
20reload) #当执行脚本名 reload时,发送HUP信号给 Nginx master 进程,实现配置重载 / 平滑升级(和nginx -s reload效果一致)
21  kill -s HUP $(cat $PID)
22;;
23
24*)
25echo "Usage: $0 {start|stop|restart|reload}"
26exit 1 # 表示输入错误,并退出
27
28esac
29exit 0
30

chmod +x /etc/init.d/nginx
chkconfig --add nginx

五、扩展-使用信号操作nginx

1#停止
2cat /usr/local/nginx/logs/nginx.pid		#先查看nginx的PID号
3kill -3 <PID号>
4kill -s QUIT <PID号>
5killall -3 nginx
6killall -s QUIT nginx
7#重载
8kill -1 <PID号>
9kill -s HUP <PID号>
10killall -1 nginx
11killall -s HUP nginx
12#日志分割,重新打开日志文件
13kill -USR1 <PID号>
14#平滑升级
15kill -USR2 <PID号>
16

六、大白鲨抓包



总结

通过系统学习Web服务架构、HTTP协议和Nginx实战配置,读者已掌握Web服务搭建核心技能,为后续深入Web运维和性能优化奠定坚实基础。


Linux——web服务介绍和nginx编译安装》 是转载文章,点击查看原文


相关推荐


力扣日刷251120
倦王2025/11/22

今天跟女朋友打了一会三角洲,现在才开始做题,争取也完成3道以上吧哈哈哈哈 第一题: 这一题,我先看了题解,题解中暴力求解的办法就是把每次遇到的指针(head)都加入到一个set()当中,然后循环体head,当head非空时,进行一个判断,如果head在set中出现过就回Ture,反之就False。下面是官方题解: class Solution: def hasCycle(self, head: ListNode) -> bool: seen = set()


Swift6 @retroactive:Swift 的重复协议遵循陷阱
RickeyBoy2025/11/20

欢迎大家给我点个 star!Github: RickeyBoy 背景:一个看似简单的 bug App 内有一个电话号码输入界面,在使用时用户需要从中选择注册电话对应的国家,以获取正确的电话区号前缀(比如中国是 +86,英国是 +44 等)。 Step 1:入口Step 2:缺少区号期望结果 这是一个看似很简单的 bug,无非就是写 UI 的时候漏掉了区号,那么把对应字段拼上去就行了嘛。不过一番调查之后发现事情没有那么简单。 列表是一个公用组件,我们需要在列表中显示


如视发布空间大模型Argus1.0,支持全景图等多元输入,行业首创!
机器之心2025/11/19

近来,世界模型(World Model)很火。多个 AI 实验室纷纷展示出令人惊艳的 Demo:仅凭一张图片甚至一段文字,就能生成一个可交互、可探索的 3D 世界。这些演示当然很是炫酷,它们展现了 AI 强大的生成能力。 但一个关键问题随之而来:这些由 AI 生成的世界中,绝大部分事物都是模型想象和虚构的。 如果我们不满足于「创造」一个虚拟世界,而是想把我们当下生活的这个真实世界(比如我们的家、办公室、工厂和城市)完整地变成一个可交互、可计算的 3D 世界呢? 这正是如视(Realsee)想要解


pytest1-接口自动化测试场景
文人sec2025/11/17

课程:B站大学 记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试,后续进阶UI自动化测试 接口自动化测试 接口自动化测试的场景测试金字塔模型自动化测试前需要思考什么?Pytest是什么?Pytest 有哪些格式要求?在pycharm下安装pytestpytest知识点测试用例示例类级别的用例示例断言测试装置介绍参数化参数化测试函数使用Mark:标记测试用例Skip:使用场景pytest命令运行测试用例文件pytest中执行顺序如何调整pytest中py文件执


Next.js第五章(动态路由)
小满zs2025/11/16

动态路由 动态路由是指在路由中使用方括号[]来定义路由参数,例如/blog/[id],其中[id]就是动态路由参数,因为在某些需求下,我们需要根据不同的id来显示不同的页面内容,例如商品详情页,文章详情页等。 基本用法[slug] 使用动态路由只需要在文件夹名加上方括号[]即可,例如[id],[params]等,名字可以自定义。 来看demo: 我们在app/shop目录下创建一个[id]目录 //app/shop/[id]/page.tsx export default function Pa


基于脚手架微服务的视频点播系统-脚手架开发部分(完结)elasticsearch与libcurl的简单使用与二次封装及bug修复
加班敲代码的Plana2025/11/15

基于脚手架微服务的视频点播系统-脚手架开发部分elasticsearch与libcurl的简单使用与二次封装及bug修复-完结 1.ElasticClient的使用1.1ES检索原理正排索引倒排索引 1.2ES核心概念1.2.1索引(index)1.2.2类型(Field)1.2.3字段(Field)1.2.4映射(mapping)1.2.5文档(document) 1.3 Kibana访问es进行测试1.3.1创建索引1.3.2新增数据1.3.3查看并搜索数据1.3.4删除索引


qinkun的缓存机制也有弊端,建议官方个参数控制
石小石Orz2025/11/14

公司前端基于qiankun架构,主应用通过qiankun加载子应用,子应用也可能通过qiankun继续加载子应用,反复套娃。经过测试,不断打开子应用后,会导致内存不断上上。通过快照分析,发现内存升高的元凶是qiankun内置的# import-html-entry。 import-html-entry 的作用是什么 import-html-entry 是 qiankun / single-spa 微前端生态的核心模块之一,用来: 加载远程 HTML 入口文件(entry HTML),并提取出其中


Python 的内置函数 int
IMPYLH2025/11/13

Python 内建函数列表 > Python 的内置函数 int Python 的内置函数 int() 是一个用于将其他数据类型转换为整数类型的重要函数。它具有以下详细特性: 基本功能: 将数字或字符串转换为整数语法:int(x, base=10)示例:int('123') # 返回 123 int(12.34) # 返回 12 参数说明: 第一个参数可以是: 数字(整数或浮点数)字符串(仅包含数字字符)布尔值(True 转为 1,False 转为 0) 可


✍️记录自己的git分支管理实践
你的人类朋友2025/11/11

前言 👋 你好啊,我是你的人类朋友! 因为本人的开发经常涉及各个分支间的同步,这一套同步的流程从刚开始的小心翼翼,到现在相对熟悉了 所以我想记录下自己工作中常用的分支同步的步骤 😆 顺便研究康康有没有可以优化的地方 🍃 正文 先介绍下背景情况吧 首先主分支为 master 其次,因为开发分为多个阶段,比如 phase_1、phase_2、phase_3 等 那就在 master 之后再创建 feature/phase_1、feature/phase_2 这样的分支,作为每一个 phase


草梅 Auth 1.11.0 发布与 GitHub 依赖安全更新 | 2025 年第 45 周草梅周报
草梅友仁2025/11/9

本文在 草梅友仁的博客 发布和更新,并在多个平台同步发布。如有更新,以博客上的版本为准。您也可以通过文末的 原文链接 查看最新版本。 前言 欢迎来到草梅周报!这是一个由草梅友仁基于 AI 整理的周报,旨在为您提供最新的博客更新、GitHub 动态、个人动态和其他周刊文章推荐等内容。 本周依旧在开发 草梅 Auth 中。 你也可以直接访问官网地址:auth.cmyr.dev/ Demo 站:auth-demo.cmyr.dev/ 文档地址:auth-docs.cmyr.dev/ 本周 草梅

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读