TEXT:
bilibili-nginx
- 课程介绍
- nginx节本概念
- nginx是什么,做什么事情
- 反向代理
- 负载均衡
- 动静分离
- nginx安装、常用命令和配置文件
- linux中安装nginx
- nginx常用命令
- nginx配置文件
- nginx配置实例1-反向代理
- nginx配置实例2-负载均衡
- nginx配置实例3-动静分离
- nginx配置高可用集群
- nginx执行原理
- nginx节本概念
- 简介
- 什么是nginx
- nginx是一个高性能的http和反向代理web服务器
- 特点:占有内存少,并发能力强
- 热部署
- nginx专为性能优化而开发,报告表明能支持50000个并发连接数
- 什么是nginx
- 相关概念
- 反向代理
- 正向代理
- 在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
- 类比:谷歌翻墙用的代理,或者shadowsocks
- 反向代理
- 客户端不需要配置
- 客户端访问→反向代理服务器9001->tomcat 8001,返回结果
- 客户端对tomcat存在以及端口无感知
- 正向代理
- 负载均衡
- 常规方式:浏览器→tomcat→mysql,线路返回
- 负载均衡:浏览器→nginx→3个tomcat
- 区别:增加服务器tomat数量,负载(请求)分发到多个tomcat
- 动静分离
- 客户端 浏览器→nginx→html、css、js
- 客户端 浏览器→nginx→jsp、servlet
- 传统方式:把静态资源和动态资源部署到tomcat里
- 反向代理
- 安装
- linux安装
- 官网下载.tar.gz包
- nginx依赖项(素材)安装
- pcre-8.37.tar.gz
- openssl-1.0.1t.tar.gz
- zlib-1.2.8.tar.gz
- nginx-1.11.1.tar.gz
- 安装pcre依赖
- 把安装压缩文件放到linux系统中 /usr/src
- wget pcre-8.37.tar.gz
- 解压压缩文件
- tar -xzvf pcre-8.37.tar.gz
- 进入解压之后的目录,执行./configure
- 使用 make && make install
- 安装之后,使用命令,查看安装版本
- pcre-config --version
- 把安装压缩文件放到linux系统中 /usr/src
- 安装其他的依赖
- yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
- 安装nginx
- 同 pcre的单独安装方式
- 安装成功之后,在usr多出来一个文件夹/local/nginx,sbin/下有nginx命令
- http://127.0.0.1
- 查看开放的端口号
- firewall-cmd --list-all
- 设置开放的端口号
- firewall-cmd --add-service=http -permanent
- sudo firewall-cmd --add-port=80/http -permanent
- 其他端口 sudo firewall-cmd --add-port=8001/http -permanent
- 重启防火墙
- firewall-cmd --reload
- linux安装
- 常用命令
- 进入nginx安装目录/sbin下
- ./nginx -v
- ./nginx
- ./nginx -s stop
- ./nginx -s reload
- ./nginx -t
- 进入nginx安装目录/sbin下
- 配置文件
- 位置
- 安装目录下的conf/下
- 组成
- 全局块
- nginx.conf文件开始至 events之间的部分
- 配置整体运行的指令
- nginx.conf文件开始至 events之间的部分
- events块
- 主要影响nginx服务器和用户的网络连接
- http块(配置最频繁部分)
- http全局块
- http server块
- 全局块
- 位置
- nginx配置实例-反向代理1
- 实现效果
- 打开浏览器,在地址栏输入www.123.com,跳转到linux系统tomcat主页面中
- 准备工作
- 安装tomcat,使用默认端口8080,并启动
- 访问过程
- 浏览器(www.123.com)→nginx(ip1:80)→tomat(ip2:8080)
- windows中配置hosts
- 1本地hosts寻找域名配置
- 2网络中寻找dns域名解析配置
- 具体配置,nginx.conf
- server { servier_name: nginx_ip;location { proxy_pass http://127.0.0.1:8080; }}
- 实现效果
- nginx配置实例-反向代理2
- 实现效果
- 使用nginx反向代理,根据访问路径跳转到不同端口的服务中,nginx监听端口为9001
- 具体
- 访问http://127.0.0.1:9001/edu/,直接跳转到127.0.0.1:8080
- 访问http://127.0.0.1:9001/vod/,直接跳转到127.0.0.1:8081
- 准备工作
- 准备两个tomcat服务器,8080和8081,注意8081的server.xml相应端口需要修改
- 创建文件夹和测试页面
- tomcat/webapps/下分别创建/edu,/vod
- /edu,/vod下放入a.html,页面显示tomcat对应的端口
- 具体配置,nginx.conf
- 增加一个server块
- server {listen 9001;server_name nginx_ip;location ~ /edu/ { proxy_pass http://tomcat1_ip:8080; }location ~ /vod/ { proxy_pass http://tomcat2_ip:8081; }}
- location 正则表达式:需百度
- 端口需要开放,9001,8080,8081
- 增加一个server块
- 实现效果
- nginx配置实例2-负载均衡
- 实现效果
- 浏览器地址输入,http://nginx_ip/edu/a.html,负载均衡效果
- 准备工作
- 准备两个tomcat服务器,8080和8081,注意8081的server.xml相应端口需要修改
- 在两台tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件夹中创建页面a.html,用于测试
- 具体配置,nginx.conf
- 新增 upstream myserver { server tomcat1_ip:8080; server tomcat2_ip:8081;}server{listen 80;server_name nginx_ip;location / { proxy_paxx http://myserver; }}
- 分配策略
- 轮询(默认)
- 每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
- weight(权重)
- weight代表权重,默认为1,权重越高被分配的客户端越多
- upstream myserver { server tomcat1_ip:8080 weight=5; server tomcat2_ip:8081 weight=10;}
- hash(ip_hash)
- 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
- upstream myserver {ip_hash; server tomcat1_ip:8080; server tomcat2_ip:8081;}
- fair
- 按照后端服务器的响应时间来分配请求,响应时间短的优先分配
- upstream myserver {server tomcat1_ip:8080; server tomcat2_ip:8081;fair;}
- 轮询(默认)
- 实现效果
- nginx配置实例3-动静分离
- 概述
- 定义
- nginx动静分离简单来说就是将动态请求和静态请求分开,而不能理解成知识单纯的将动态页面和静态页面物理分离。可以理解成使用nginx处理静态页面,使用tomcat处理动态页面。
- 实现角度
- 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上
- 另一种是动态跟静态文件混合在一起发布,通过nginx来分开
- 目的
- 提高系统响应速度,降低动态请求访问tomcat的频率
- 浏览器缓存
- location~expires参数设置,如 3d
- 定义
- 准备工作
- root下新建 /data/www和/data/image两个文件夹
- www中放入a.html,image中放入图片 a.jpg
- 实现效果
- 访问 http://nginx_ip/www/a.html → 实际访问nginx所在服务器的/data/www/a.html
- 访问 http://nginx_ip/image/a.jpg → 实际访问nginx所在服务器的/data/image/a.jpg
- 配置(nginx.conf)
- server {listen 80;server_name nginx_ip;location /www/ { root /data/; index index.html index.htm; }location /image/ { root /image/; autoindex on; }}
- autoindex on 列出文件的目录
- 概述
- nginx配置高可用集群
- nginx可能会宕机
- nginx配置主从集群 master/backup
- keepalived
- 路由作用
- 设置虚拟ip
- keepalived
- 准备工作
- 需要两台服务器,如 192.168.17.129,192.168.17.131
- 在两台服务器上都安装上nginx
- 在两台服务器上都安装上keepalived
- yum install keepalived -y
- rpm -q -a keepalived
- /etc/keepalived/keepalived.conf
- 完成高可用配置
- /etc/keepalived/keepalived.conf
- 全局,脚本,虚拟ip
- 全局,router_id配置的主机名,与hosts中127.0.0.1 绑定的域名相同
- systemctl start keepalived.service
- systemctl stop keepalived.service
- ip a 可以查看绑定的虚拟ip
- /etc/keepalived/keepalived.conf
- nginx执行原理
- master&worker
- 启动一个nginx后
- ps -ef |grep nginx
- 一个master,一个worker,共两个进程
- worker如何进行工作
- 争抢模式|方式
- 一个master和多个worker好处
- 热部署
- 可以使用 nginx -s roload :假设当前任务被第一个worker争抢到,1/4,此时修改配置并执行 ./nginx -s reload ,后三个worker更新配置,第一个由于已有任务,并不执行更新。此时若有请求进入,则第一个worker不参与争抢,而是剩余三个已经更新配置的三个worker争抢,当第一个worker执行完毕,更新配置,当有新的请求来是,第一个也可以参与争抢,并且所有的worker都已经是最新的配置
- worker进程独立,不用加锁,一个worker挂掉不影响其他worker正常工作
- 设置多少个worker合适
- worker数=cpu数量
- nginx也采用多路io复用机制
- 连接数worker_connection
- 一个静态请求占用2个连接数:请求、响应
- 一个动态请求占用4个连接数:nginx与tomcat之间有一组请求、响应
- 最大并发数
- 一个maser,4个worker,每个worker最大的链接数是1024,计算最大并发数
- 公式
- 静态请求:woker_proccesses * woker_connections / 2
- 动态请求:woker_proccesses * woker_connections / 4
- 热部署
- master&worker