【本文参考尚硅谷的视频】
1、基本概念
(1)是什么,能做什么
高性能的HTTP和反向代理web服务器,占用内存少,并发性高,专门为性能优化而开发。
(2)反向代理
① 正向代理:如果说把局域网外的internet想象成一个巨大的资源库,则局域网中的客户想要访问internet,则需要代理服务来访问,这种代理服务就叫正向代理。
② 反向代理:客户端无任何感知,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到代理服务器,由代理服务器选择目标服务器获取数据后,再返回给客户端,此时代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实的服务器IP地址。
(3)负载均衡
将请求集中到单个服务器的情况,改为请求分发到多个服务器上,将负载分发到不同的服务器上。
(4)动静分离
为了加快网站的解析速度,可以吧静态页面和动态页面有不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
2、安装、常用命令、配置文件
(1)在linux中安装nginx
使用xshell连接Linux
下载nginx
① 安装pcre依赖
把安装文件放到linux指定文件夹中,可以直接拖过去
解压压缩文件 tar -xvf 压缩文件名称
进入解压之后的根目录,执行./configure
这里如果不成功,需要安装依赖库,下图是成功之后的样子
依赖库执行命令:
gcc: yum install gcc-c++ 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境
pcre: yum install -y pcre pcre-devel PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式
zlib: yum install -y zlib zlib-devel zlib提供了很多种压缩和解压缩的方式,nginx使用zlib堆http的内容进行gzip
openssl: yum install -y openssl openssl-devel openssl以一个强大的安全套接字层密码库,囊括主要的密码算法、常用的秘钥和证书封装管理功能及ssl协议,并提供丰富的应用程序供测试或其它目的使用。
ngixn不仅支持http,也支持https,所以需要安装openssl
使用make && make install命令,表示编译并安装
查看安装:pcre-config --version
② 安装其他依赖(这个是上一步依赖库执行的命令)
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
③ 安装nginx
步骤同①
这里要注意,我使用的是root账号登录的,我的压缩包及解压后的文件在 root/usr/src 下面,而安装完成之后,我的 nginx 安装在了共享文件的 usr/local 下
安装成功之后,在共享文件中, usr/local/nginx 文件夹自动生成
启动:cd 至usr/local/nginx/sbin 文件夹下,使用命令 ./nginx 启动,启动后使用 ps -ef | grep nginx 查看nginx的进程
我这里遇到了问题,nginx已启动,但是我在本地的web中访问不了,执行以下操作后就好了:
第一步,对80端口进行防火墙配置: firewall-cmd --zone=public --add-port=80/tcp --permanent
第二步,重启防火墙服务: systemctl restart firewalld.service
(2)nginx常用命令
必须进入nginx的目录:usr/local/nginx/sbin
① 查看nginx版本号
./nginx -v
② 启动
./nginx
③ 关闭
./nginx -s stop
④ 重新加载
./nginx -s reload
⑤ 查看nginx进程
ps -ef | grep nginx
文件编辑:
i 进入编辑模式
esc 退出编辑模式
:wq 退出并保存
:q! 退出不保存
(3)ngin配置文件
配置文件位置: usr/local/nginx/conf/nginx.conf
配置文件组成(三部分):
全局块:从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令
worker_processes 1; 值越大,可以支持的并发处理量越多
events块:主要影响 nginx 服务器与用户的网络连接:
worker_connections 1024; 支持的最大连接数
http块:代理、缓存、日志等绝大多数功能和第三方模块的配置都在这里,也可以包括 http 全局块、events块
3、nginx配置实例(反向代理)
首先熟悉几个命令:
开放端口号: firewall-cmd --add-port=8080/tcp --permanent
重启防火墙: systemctl restart firewalld.service 或者 firewall-cmd --reload
查看开放的端口号: firewall-cmd --list-all
实例一:从 www.123.com 到 192.168.3.124:8081(tomcat)
访问过程分析:
windows 中的浏览器(www.123.com)
nginx(192.168.3.124)
tomcat(192.168.3.124:8081)
具体步骤:
修改本地文件 C:\Windows\System32\drivers\etc\hosts,最后添加 192.168.3.124 www.123.com ,意思是将www.123.com的请求改为 192.168.3.124
修改 nginx 配置文件:上边的意思是,访问192.168.3.124,其实就是访问本机;下边的意思是,将请求发送到 localhost:8081
实例二:
http://192.168.3.124:9001/edu/a.html 访问到 192.168.3.124:8081
http://192.168.3.124:9001/vod/a.html 访问到 192.168.3.124:8082
准备:两个 tomcat 启动,然后再 tomcat 的 webapps 目录下添加 a.html 文件,里面内容分别为:8081端口、8082端口
配置 nginx:再 http 块添加 server,意思为:访问 192.168.3.124:9001 时,如果连接中带有 edu,则访问 8081端口服务;如果连接中带有 vod,则访问 8082端口服务;这里的 ~ /***/ 是正则表达式
然后分别访问:http://192.168.3.124:9001/edu/a.html、http://192.168.3.124:9001/vod/a.html
(这里一定要注意:8081、8082、9001端口都必须开放,不然怎么都访问不到)
4、nginx配置实例(负载均衡)
启动两个 tomcat,将 vod 文件夹重命名为 edu
配置 nginx.conf 文件
这里有人会遇到只能访问一个tomcat的情况,加上一行这个配置就好了:lacation /favicon.ico{} ,这是为啥呢?
打开F12看到下图,因为每次访问 a.html 的时候,轮询到8081,然后访问 favicon.ico (这个是网页左上角的图标)的时候访问的是 8082,于是乎,循环开始了!自己在看到的每次都是同一个tomcat。加上上面的配置,意思是不去拿这个图标,就可以正常了。
nginx 分配服务器策略:
轮询:轮着来,默认
权重:weight=1,权重越高,访问次数越多
ip_hash:某个IP地址第一次访问的哪个端口,以后永远都访问这个地址,在 myserver 中添加一行 ip_hash;
fair:按照服务器的响应时间分配,响应时间越短优先级越高,在 myserver 中添加一行 fair;
5、nginx配置实例(动静分离):跟实例二差不多,当访问 ip:sort/data/ 的时候,代理到 www 或者 image 文件夹,从这两个文件夹下取需要的数据(一个静态数据,一个动态数据)
6、配置高可用集群
两个 nginx(两台虚拟机),一个主服务器,一个备用服务器;一般情况下,通过主服务器代理,当主服务器宕机的时候,通过备用服务器代理。
两台虚拟机都安装 keepalived
使用命令:yum install keepalived -y 安装完成后使用命令查看:rpm -p -a keepalived
完成后,在 etc 文件夹下会生成目录,里面有配置文件 keepalived.conf
开始配置:
修改/etc/keepalived/keepalivec.conf 配置文件(红色为修改部分):
#全局配置
7、nginx原理
nginx 有两个进程,一个master,多个 worker,master 负责分配任务(管理、监控),worker 负责具体任务的执行
nginx 中的 worker 是争抢的模式
一个 masker,多个 worker 的好处:
可以使用命令 ./nginx -s reload 热部署
每个 worker 都是独立的进程,如果其中一个 worker 出现了问题,其他 worker 独立的,继续进行争抢,实时请求过程,不会造成服务中断。
设置多少个 worker 合适
worker 数和服务器的 cpu 数相等是最适宜的