Linux——web服务介绍和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等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

bash 复制代码
# 安装依赖包
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 查询软件包是否已经安装
yum list installed gcc gcc-c++

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

bash 复制代码
useradd -M -s /sbin/nologin nginx

-M:"不创建家目录"

-s /sbin/nologin : 只能被程序调用,不能登入系统

5、定制/编译/安装Nginx

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

运行结果:

有些not found 不影响审核通过。

只要三大核心依赖(PCRE 正则库、OpenSSL 加密库、zlib 压缩库)找到即可

检查通过:

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

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

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

bash 复制代码
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		#让系统识别nginx的操作命令

可以通过echo P A T H 查看你的系统 PATH查看你的系统 PATH查看你的系统PATH包含的目录,比如输出可能是:

/usr/local/sbin 是$PATH中的默认目录

7、查看并启动nginx

bash 复制代码
nginx -t	# 用于测试配置文件语法与有效性的命令
nginx # 启动

8、添加nginx系统服务

vim /etc/init.d/nginx

bash 复制代码
#!/bin/bash
#chkconfig: 35 99 20  
#description:Nginx Service Control Script    # 这也是必须的 
COM="/usr/local/nginx/sbin/nginx" 
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
  $COM
;;

stop)
  kill -s QUIT $(cat $PID)
;;

restart)
  $0 stop
  $0 start
;;

reload) #当执行脚本名 reload时,发送HUP信号给 Nginx master 进程,实现配置重载 / 平滑升级(和nginx -s reload效果一致)
  kill -s HUP $(cat $PID)
;;

*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1 # 表示输入错误,并退出

esac
exit 0

chmod +x /etc/init.d/nginx

chkconfig --add nginx

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

bash 复制代码
#停止
cat /usr/local/nginx/logs/nginx.pid		#先查看nginx的PID号
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx
#重载
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx
#日志分割,重新打开日志文件
kill -USR1 <PID号>
#平滑升级
kill -USR2 <PID号>

六、大白鲨抓包



总结

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

相关推荐
2301_807583232 小时前
ubuntu22.04集群部署clickhouse详细步骤
linux·clickhouse·zookeeper
尹蓝锐2 小时前
Linux解压各种压缩包命令
linux·运维·服务器
叫致寒吧3 小时前
web和Nginx的搭建
运维·nginx
小嘟嘟26793 小时前
Linux-奇怪的No such file or directory
linux·运维·服务器
shizhan_cloud3 小时前
iSCSI 服务器
linux·运维
百***61874 小时前
linux 设置tomcat开机启动
linux·运维·tomcat
春日见4 小时前
claude code基本介绍
linux·运维·服务器·ros2·moveit2
Cyan_RA94 小时前
操作系统面试题 — Linux中如何查看某个端口有没有被占用?
linux·后端·面试
讨厌下雨的天空5 小时前
线程控制
linux