Web服务-Nginx
系统环境 Ubuntu 18.04.2 LTS
一、Nginx介绍
Web服务器 反向代理服务器 邮件代理服务器
轻量级的Web服务器 删减优化
延伸版本 Tengine(淘宝), OpenResty(章亦春)
二、Nginx 安装
1. 获得软件
sudo wget http://nginx.org/download/nginx-1.17.1.tar.gz -P /usr/src
2. 安装前准备
sudo tar zxvf nginx-1.17.1.tar.gz
cd nginx-1.17.1/
sudo apt-get install gcc
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install zlib1g-dev
sudo apt-get install openssl libssl-dev3. 配置
检查环境是否满足安装条件 依赖解决
指定安装方式 如配置文件, 命令文件等各类文件放在哪里 开启模块功能(内置模块 三方模块)
指定软件安装在哪里
结果汇总
4. 编译
使用gcc将源码生成可执行程序
5. 安装
6. 启动
7. 验证
8. 浏览器测试
三、Nginx 配置文件详解
配置文件相当于变量文件
/usr/local/nginx/conf/nginx.conf
相关命令
https://www.cnblogs.com/ivy-zheng/p/10991915.html
四、默认网站
nginx配置文件中只有一个server的时候, 该server被nginx认为是默认网站, 所有发给服务器80端口的数据都会默认给该server
1. 目录访问控制
2. 日志管理
自定义json格式 为以后分析做铺垫
3. 防盗链
4. 日志截断
五、虚拟主机
把一台物理服务器划分为多个"虚拟"的服务器, 每一个虚拟主机都可以有独立的域名和独立的目录
同时发布两个网站: DocumentRoot /usr/local/nginx/html/web01 DocumentRoot /usr/local/nginx/html/web02
1. 基于IP的虚拟主机
实现条件: 两个IP, 两个DocumentRoot并有相应索引页index.html
缺点: 需要多个IP 如果是公网IP 需要收费
2. 基于端口的虚拟主机
实现条件: 只需一个IP, 多个端口
缺点: 端口是无法告诉公网用户, 无法适用于公网客户, 适合内部用户
3. 基于域名
一个网站必然有一个域名, 推荐使用
六、反向代理
正向代理: 小区宽带 局域网 代用户上网 反向代理: 代理服务器
代理中间多了一层
堡垒机场景
网络安全复杂
安全配置只接受来自堡垒机的链接访问, 其他都拒绝
业务服务器的安全配置只接受来自堡垒机的链接访问, 其他都拒绝
发布内网服务器
适合于公网IP地址不足的场景
缓存场景
静态资源 缓存服务器 比例8 动态数据 业务服务器 比例2
反向代理实现
七、限速
防止用户海量请求, 如DDOS防御 保护磁盘IO, 如下载场景
限速原理
水(请求)从上方倒入水桶, 从水桶下方流出(被处理); 来不及流出的水存在水桶中(缓冲), 以固定速率流出; 水桶满后水溢出(丢弃)
这个算法的核心: 缓存请求, 匀速处理, 多余的请求直接丢弃
实现方式
nginx官方版本限制IP的连接和并发分别有两个模块:
limit_req_zone 用来限制单位时间内的请求数, 即速率限制 limit_conn_zone 用来限制同一时间连接数, 即并发限制
八、URL重写
rewrite几乎是所有web产品必备技能 nginx服务器rewrite功能实现依赖pcre(Perl Compatible Regular Expression)
域名变更(京东)
用户跳转(从某个连接跳转到另个连接)
伪静态场景(便于CDN缓存动态页面数据)
原理: Client -> Nginx -> Client ->业务服务
url rewrite语法
九、优化
软件安装的时候,以硬件最小化进行安装,需要优化; 提高用户体验
1. 工作进程
nginx是主进程+工作进程模型
worker_processes 1; 工作进程数 按CPU的总核心数
worker_cpu_affinity 0001 0010 0100 1000; CPU的亲和力
worker_connections 1024; 一个工作进程的并发数
cat /proc/cpuinfo | grep "flags" | wc -l top
2. 长连接
http协议底层协议为tcp 优化目标: 减少三次握手和四次断开的次数
keepalive_timeout 5; 长连接时间
keepalive_requests 8192; 每个长连接接受最大请求数
3. 数据压缩
减少带宽成本
4. 客户端缓存
Last updated