【后端】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 目录结构与基本运行原理
- 目录
- 更改默认页
- 基本运行原理
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
- 开启后
- worker_processes
- server
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的反向代理配置
基于反向代理的负载均衡器
负载均衡策略
反向代理
- 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 51priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 }virtual_ipaddress { 192.168.44.200 }
}# 第二台机器
! Configuration File for keepalivedglobal_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协议
1.14.2 Https 原理
- CA 机构
- 证书
- 客户端(浏览器)
- 服务器端
1.14.3 证书自签名
1.14.4 在线证书申请
2. 应用场景
2.1 HttpWeb服务器
- 可以用于构建静态web站点
- 虚拟主机
- 用于展示Html、css等静态资源或作为CDN(Content Delivery Network)资源服务器
- 支持rtmp协议,直播推流
- 使用http协议作为短视频、多媒体资源服务器(优酷、抖⾳)
- 文件下载服务器(rar、exe⽂件)
2.2 高性能网关/反向代理服务器
- 内网服务器与外围隔离
- 以隧道模式完成请求转发
- 支持Http的7层或Tcp/Udp的4层转发
2.3 日志采集
- 供大数据分析
- 使用http协议,接收用户请求
- 返回简单报文
- 收集用户访问日志(京东、淘宝)
2.4 应用服务器
- 整合php、Perl、Python、Lua等语言
- 内存缓存
- 可以连接其他中间件
- 中间件中不宜实现过度复杂的业务逻辑
2.5 负载均衡器
- 内置轮询、权重、ip-hash等算法
- 可自定义负载均衡算法
- Cookies的会话保持问题
2.6 软防火墙
2.7 使用Lua等语言在Nginx的基础上进行二次开发
2.8 请求规则匹配
2.9 过滤非法请求达到流量清洗的目的
3. 介绍
- 集群化、分布式、云原生的架构时代背景下,虽然廉价的硬件已经让程序员们从编码性能中暂时解脱出来但是对于高级程序员和架构师在⾯对复杂或是极端的环境系仍需要对单机性能压榨。
- Nginx出色的设计在多年企业实际生产环境中得到了广大架构师的认可,Nginx不单纯能处理web服务、邮件代理服务,它模块化的架构可以在几乎不损失性能的条件下引入多种扩展模块,使其能应付更加复杂的情况。
- 我们在学习Nginx的过程中会发现它是所有流量的入口,贯穿了整套系统架构,占据了重要的位置,学好这门Nginx课程便可以全面了解多种场景下的系统架构设计,让自己向架构师岗位更进⼀步。 总结⼀句话:Nginx好好优化,高并发不怕!
【后端】Nginx 体系相关推荐
- (架构)后端技术体系框架
1.后端技术体系框架 使用Java后端技术的目的就是构建业务应用,为用户提供在线或者离线服务.因此,一个业务应用需要哪些技术.依赖哪些基础设施就决定了需要掌握的后端技术有哪些.纵观整个互联网技术体系再 ...
- 反向代理or后端nginx 生产用于缓存视频需要解决的问题
nginx proxy_cache 生产上需要解决的问题 http://blog.csdn.net/dengjiexian123/article/details/53386586 提出疑问: 到此,就 ...
- Java后端学习体系(韩顺平)
https://www.bilibili.com/video/BV14K4y177Qk?spm_id_from=333.999.0.0 文章目录 Java基础 变量 控制结构 OOP 数组 Java ...
- JAVA——Java后端技术体系韩顺平框架图_韩顺平Java基础学习路线图
第一阶段:Java基础 变量.控制结构.OOP(封装,继承,多态).数组.Java API.异常和处理.集合.泛型.IO.反射.网络通信 第二阶段:Java高级 Java多线程/高并发 1.1 并发基 ...
- 前端后端nginx配置
使用场景: 前端放在nginx那台服务器上,访问其余2台后端接口服务器地址 首先在前端配置的路径为:nginx地址和端口+共同的路由 例如:127.0.0.1:8080/student nginx主要 ...
- Linux学习-HaProxy代理后端Nginx
代理作用:web缓存(加速),反向代理.内容路由(根据流量及内容类型将请求转发至特定服务器),转码器 缓存作用:减少冗余内容传输,节省带宽.缓解网络瓶颈,降低对原始服务器压力,降低传输延迟 Hapro ...
- PHP跨域处理 图片跨域 接口跨域 后端nginx的cors设置
图片跨域报错: 解决方法: add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Re ...
- 我也说说Nginx解决前端跨域问题,正确的Nginx跨域配置(后端Nginx CORS跨域配置、CORS设置,后端允许跨域请求)
最近连续两个朋友问我跨域相关问题,我猜想可能不少朋友也遇到类似问题,我打算写个博客聊一下我实际使用的配置, 先说明一下,我并不太了解这配置,没精力去了解太多,但我觉得其中有一些关键的小注意点,可能有些 ...
- SpringBoot的幕后推手,Java后端知识体系
阶段二.分析和组装 第一个阶段完成以后,我们可以先暂时认为IoC容器中保存着一个个相互独立的bean,它们之间还没有任何关系,但是实际项目中它们之间是有着不可或缺的关系的,所以呢,Ioc容器第二个阶段 ...
- Java后端技术体系
最新文章
- 交换机工作原理(下)
- java代码实现购物车小程序_使用Taro实现小程序商城的购物车功能模块的实例代码...
- php ci url,URL路由设置-CI(codeigniter)PHP框架再探
- 子网掩码与子网个数、主机地址个数的关系
- mysql读写分离 存储过程_MySQL读写分离 · wang-y/Technical-Information Wiki · GitHub
- struts中几种常用的Action
- java debug详解_Java远程debug详解
- 接上文安装完opencv后安装viz模块
- java qq 传送文件_java 传送文件
- 箭头函数写法_JavaScript|箭头函数的用法
- linux 网站服务器优化 web server优化
- 手机日常使用技巧、和手机停机如何免费上网 。好多大家不知道的功能 不看后悔哦
- 好心情董事长陈冠伟荣膺2022蔚澜奖年度创新企业家
- mysql数据库执行mysqladmin flush-hosts方法
- mysql .xb文件恢复
- Bugku_清凉一夏
- 40句让你坦露心声的经典
- ANSYS apdl命令流笔记11------载荷(F命令)与约束(D命令)的区别
- 【搬运记录】Windows系统局域网远程Linux系统
- 爬虫入门python