文章目录
1、Web
1.1 Web概述
Web(World Wide Web,万维网)是运行在互联网之上的一个 超文本信息系统,它依赖于 HTTP/HTTPS 协议 实现浏览器与服务器之间的交互
特点
- 分布式:资源分布在世界各地的服务器上
- 跨平台:只要有浏览器,就能访问资源
- 无状态:每次 HTTP 请求都是独立的,服务器不会记住客户端状态(除非使用 Cookie/Session)
Web 采用B/S 架构(Browser/Server):
- Browser(浏览器):用户的入口,发送请求、渲染页面
- Server(服务器):接收请求,返回所需资源或动态内容
1.2 Web请求与响应过程
一次完整的 Web 访问过程包括以下步骤:
- 输入 URL:用户在浏览器输入
http://www.example.com - DNS 解析:浏览器将域名解析为 IP 地址
- 建立连接:浏览器与 Web 服务器建立 TCP 连接(3 次握手)
- 发送请求:浏览器发起 HTTP 请求(GET/POST)
- 服务器处理:
- Web 服务器处理静态资源请求
- 动态请求转发到应用服务器(如 Tomcat、Django)
- 应用服务器可能再查询数据库
- 返回响应:Web 服务器将结果打包成 HTTP 响应报文返回浏览器
- 渲染页面:浏览器解析 HTML、加载 CSS/JS、渲染最终页面
1.3 静态资源与动态资源
-
静态资源:不需要服务器额外处理,直接返回即可
- HTML、CSS、图片、视频、JS 文件
- 优点:速度快,压力小
-
动态资源:需要服务器端代码计算生成,再返回客户端
- PHP 脚本、Python Flask/Django、Java Servlet、Ruby
- 优点:个性化内容,支持交互
1.4 Web发展阶段
- Web 1.0(只读):静态页面为主,用户只能浏览
- Web 2.0(交互式):用户可生成内容,AJAX(前端) 技术普及
- Web 3.0(智能化):语义网、区块链、去中心化概念兴起
2、HTTP与HTTPS
2.1 两者区别
- HTTP:明文传输,不安全
- HTTPS:在 HTTP 上加入 SSL/TLS 加密,防止中间人攻击
2.2 HTTPS 握手流程
TLS 握手过程(建立安全通道)
流程
- 客户端 Hello
- 浏览器发起请求,告诉服务器自己支持哪些加密算法
- 服务端 Hello + 证书
- 网站返回 SSL 证书(证明身份),选择一种加密算法
- 客户端验证证书
- 浏览器检查证书是否可信(CA 颁发、没过期、域名匹配)
- 协商密钥
- 双方生成一个临时密钥,用于对称加密后续通信
- 加密通信开始
- 后续 HTTP 数据都通过加密通道传输
2.3 HTTP状态码
| 类型 | 范围 | 含义 |
|---|---|---|
| 2xx | 200-299 | 成功 |
| 3xx | 300-399 | 重定向 |
| 4xx | 400-499 | 客户端错误 |
| 5xx | 500-599 | 服务器错误 |
| 状态码 | 含义 |
|---|---|
| 200 OK | 请求成功 |
| 301 Moved Permanently | 新url |
| 302 Found | 临时新地址 |
| 304 Not Modified | 使用本地缓存 |
| 400 Bad Request | 请求格式错误 |
| 401 Unauthorized | 未认证 |
| 403 Forbidden | 禁止访问 |
| 404 Not Found | 找不到页面 |
| 500 Internal Server Error | 服务器内部错误 |
| 502 Bad Gateway | 网关错误 |
| 503 Service Unavailable | 服务不可用 |
| 504 Gateway Timeout | 网关超时 |
3、Nginx
3.1 概述
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,
是一款轻量级的 Web 服务器/反向代理服务器及电子邮件代理服务器,
单台物理服务器可支持30 000~50 000个并发请求。并在一个 BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:百度 BWS、新浪、网易、腾讯等
- 静态资源服务:可以直接把网页、图片、视频这些文件发给用户
- 反向代理:用户访问你的服务器,Nginx 可以帮你把请求转发到后端真正处理请求的服务器
- 负载均衡:当有很多后端服务器时,Nginx 可以智能分配流量,让每台服务器都不忙不过来
- 高并发处理:用事件驱动的方式处理请求,能同时处理成千上万的用户请求,而不会占用太多资源
优势:
- 轻量级,占用内存小
- 支持百万级并发访问
- 稳定可靠,开源且社区活跃
3.2 Nginx进程结构
web请求处理机制
-
多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求
-
多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定
3.3 Nginx 安装
官方下载 https://nginx.org/download/nginx-1.20.2.tar.gz
## 1、关闭防火墙安全模式
systemctl stop firewalld
systemctl stop iptables
setenforce 0
## 2、安装依赖包
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
## 3、创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
## 4、编译安装Nginx
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/
cd nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
make && make install
## 创建软链接,让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
## 查看版本
nginx -v
## 5、检查、启动、重启、停止 nginx服务
## 检查配置文件
nginx -t
## 启动
nginx
## 查看
netstat -antulp |grep :80
lsof -i:80
ps -aux |grep nginx
##
添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
---------------------------------------------------------
[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务
[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定
PIDFile以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
## 设置权限
chmod 754 /lib/systemd/system/nginx.service
## 设置开机自启
systemctl start nginx.service
systemctl enable nginx.service
#停止
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号>
| 信号编号 | 信号名 | 含义 |
|---|---|---|
| 0 | EXIT | 程序退出时收到该信息。 |
| 1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |
| 2 | INT | 表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号。 |
| 3 | QUIT | 退出。 |
| 9 | KILL | 杀死进程,即强制结束进程。 |
| 11 | SEGV | 段错误。 |
| 15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
新版本升级:
tar -zxvf nginx-1.xx.xx.tar.gz 1.22.0
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old 备份
cp objs/nginx /usr/local/nginx/sbin/nginx
重启服务 并且
nginx -V #查看版本
make upgrade
#或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
3424

被折叠的 条评论
为什么被折叠?



