【后端】Nginx 体系

Nginx

一、Nginx 基础

1. 安装

1.1 Nginx

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了 IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004 年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配 置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3) 代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实 上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站 用户有:百度、京东、新浪、网易、腾讯、淘宝等。

1.2 虚拟机安装

  • 使用虚拟机安装学习Nginx
  • 特点:安装使用简单
    • 使用于传统公司
    • 适用于VPS
    • 适用于高性能服务器部署

1.3 电脑配置

  • 内存:建议8G以上
  • 磁盘:建议使用SSD
  • CPU:4核以上主流即可

1.4 虚拟机安装与配置

  • 准备:
    • Vmware、Virtualbox、Parallels
    • CentOS7.4镜像
  • 安装与配置操作系统:
    • 配置虚拟机上网
    • 配置静态ip地址

1.5 虚拟机不能上网简单排错

  • Vmware中网关是否正确
  • 直接ping ip是否能通(物理连接排查)
  • 使用版本一样的软件
  • 卸载重装最快

1.6 常用版本分为四大阵营

  • Nginx开源版
    • http://nginx.org/
  • Nginx plus 商业版
    • https://www.nginx.com
  • Openresty
    • http://openresty.org
  • Tengine
    • http://tengine.taobao.org/

1.7 Nginx开源版安装

  • 下载
  • 编译安装与依赖检查
  • Nginx启停
  • 关闭防火墙
  • 安装成系统服务
  • (详见Nginx安装文档)

1.8 目录结构与基本运行原理

  • 目录
  • 更改默认页
  • 基本运行原理
    【后端】Nginx 体系_第1张图片

1.9 Nginx基础配置

  • 最小配置文件
  • 核心配置
  • 虚拟主机配置
    • worker_processes
      • worker_processes 1; 默认为1,表示开启一个业务进程
    • worker_connections
      • worker_connections 1024; 单个业务进程可接受连接数
    • include mime.types;
      • include mime.types; 引入http mime类型
    • default_type application/octet-stream;
      • default_type application/octet-stream; 如果mime类型没匹配上,默认使用二进制流的方式传输。
    • sendfile on;
      • sendfile on; 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。
    • 未开启sendfile
      【后端】Nginx 体系_第2张图片
    • 开启后
      【后端】Nginx 体系_第3张图片
  • server
    【后端】Nginx 体系_第4张图片
server {
	listen 80; 监听端口号 
	server_name localhost; 主机名 
	location / { 匹配路径 
		root html; 文件根目录 
		index index.html index.htm; 默认页名称 
	}
	error_page 500 502 503 504 /50x.html; 报错编码对应页面 
	location = /50x.html { 
		root html; 
	} 
}

1.10 虚拟主机与域名解析

  • 域名、dns、ip地址的关系
  • 浏览器、Nginx与http协议
  • 虚拟主机原理
  • 域名解析与泛域名解析实战
  • 域名解析相关企业项目实战技术架构
    • 多用户二级域名
    • 短网址
    • httpdns
  • Nginx中的虚拟主机配置

1.11 虚拟主机

  • 原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务

  • servername匹配规则

    • 我们需要注意的是servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。
    • 完整匹配
      • 我们可以在同一servername中匹配多个域名
    server_name vod.mmban.com www1.mmban.com;
    
    • 通配符匹配
    server_name *.mmban.com
    
    • 通配符结束匹配
    server_name vod.*;
    
    • 正则匹配
    server_name ~^[0-9]+\.mmban\.com$;
    

1.12 反向代理

  • 网关、代理与反向代理

  • 反向代理在系统架构中的应用场景

  • Nginx的反向代理配置

  • 基于反向代理的负载均衡器

  • 负载均衡策略
    【后端】Nginx 体系_第5张图片

  • 反向代理

    • proxy_pass http://baidu.com;
location / { 
	proxy_pass http://baidu.com/; 
}
  • 基于反向代理的负载均衡
upstream httpd { 
	server 192.168.44.102:80; 
	server 192.168.43.103:80; 
}
  • 负载均衡策略
    • 轮询
      • 默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。
    • weight(权重)
      • 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpd { 
	server 127.0.0.1:8050 weight=10 down; 
	server 127.0.0.1:8060 weight=1; 
	server 127.0.0.1:8060 weight=1 backup; 
}
 - down:表示当前的server暂时不参与负载
 - weight:默认为1.weight越大,负载的权重就越大。
 - backup:其它所有的非backup机器down或者忙的时候,请求backup机器。
  • ip_hash
    • 根据客户端的ip地址转发同一台服务器,可以保持回话。
  • least_conn
    • 最少连接访问
  • url_hash
    • 根据用户访问的url定向转发请求
  • fair
    • 根据后端服务器响应时间转发请求

1.13 高可用配置

  • 高可用场景及解决方案

  • 安装keepalived

    • 编译安装
    • 下载地址
      • https://www.keepalived.org/download.html#
    • 使用 ./configure 编译安装
    • 如遇报错提示
    configure: error: 
    	!!! OpenSSL is not properly installed on your system. !!! 		
    	!!! Can not include OpenSSL headers files. !!!
    
    • 安装依赖
    yum install openssl-devel
    
    • yum安装
    yum install keepalived
    
  • 配置

    • 使用yum安装后配置文件在 /etc/keepalived/keepalived.conf
    • 最小配置
# 第一台机器
! Configuration File for keepalived 

global_defs { 
	router_id lb111 
}

vrrp_instance alex { 
	state MASTER 
	interface ens33 
	virtual_router_id 51
	priority 100 
	advert_int 1 
	authentication { 
		auth_type PASS 
		auth_pass 1111 
	}
	virtual_ipaddress { 
		192.168.44.200 
	} 
}

# 第二台机器
! Configuration File for keepalived
 
global_defs { 
	router_id lb110 
}

vrrp_instance alex { 
	state BACKUP 
	interface ens33 
	virtual_router_id 51 
	priority 50 
	advert_int 1 
	authentication { 
		auth_type PASS 
		auth_pass 1111 
	}
	virtual_ipaddress { 
		192.168.44.200 
	} 
}
  • 启动服务
systemctl start keepalived

1.14 Https证书配置

1.14.1 不安全的Http协议

【后端】Nginx 体系_第6张图片
【后端】Nginx 体系_第7张图片

1.14.2 Https 原理
  • CA 机构
  • 证书
  • 客户端(浏览器)
  • 服务器端

【后端】Nginx 体系_第8张图片

1.14.3 证书自签名
1.14.4 在线证书申请

2. 应用场景

2.1 HttpWeb服务器

  • 可以用于构建静态web站点
  • 虚拟主机
  • 用于展示Html、css等静态资源或作为CDN(Content Delivery Network)资源服务器
  • 支持rtmp协议,直播推流
  • 使用http协议作为短视频、多媒体资源服务器(优酷、抖⾳)
  • 文件下载服务器(rar、exe⽂件)
    【后端】Nginx 体系_第9张图片

2.2 高性能网关/反向代理服务器

  • 内网服务器与外围隔离
  • 以隧道模式完成请求转发
  • 支持Http的7层或Tcp/Udp的4层转发
    【后端】Nginx 体系_第10张图片

2.3 日志采集

  • 供大数据分析
  • 使用http协议,接收用户请求
  • 返回简单报文
  • 收集用户访问日志(京东、淘宝)
    【后端】Nginx 体系_第11张图片

2.4 应用服务器

  • 整合php、Perl、Python、Lua等语言
  • 内存缓存
  • 可以连接其他中间件
  • 中间件中不宜实现过度复杂的业务逻辑【后端】Nginx 体系_第12张图片

2.5 负载均衡器

  • 内置轮询、权重、ip-hash等算法
  • 可自定义负载均衡算法
  • Cookies的会话保持问题

2.6 软防火墙

2.7 使用Lua等语言在Nginx的基础上进行二次开发

2.8 请求规则匹配

2.9 过滤非法请求达到流量清洗的目的

3. 介绍

  • 集群化、分布式、云原生的架构时代背景下,虽然廉价的硬件已经让程序员们从编码性能中暂时解脱出来但是对于高级程序员和架构师在⾯对复杂或是极端的环境系仍需要对单机性能压榨。
  • Nginx出色的设计在多年企业实际生产环境中得到了广大架构师的认可,Nginx不单纯能处理web服务、邮件代理服务,它模块化的架构可以在几乎不损失性能的条件下引入多种扩展模块,使其能应付更加复杂的情况。
  • 我们在学习Nginx的过程中会发现它是所有流量的入口,贯穿了整套系统架构,占据了重要的位置,学好这门Nginx课程便可以全面了解多种场景下的系统架构设计,让自己向架构师岗位更进⼀步。 总结⼀句话:Nginx好好优化,高并发不怕!

你可能感兴趣的:(后端,nginx)