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-dev

3. 配置

  • 检查环境是否满足安装条件 依赖解决

  • 指定安装方式 如配置文件, 命令文件等各类文件放在哪里 开启模块功能(内置模块 三方模块)

  • 指定软件安装在哪里

结果汇总

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