Nginx是什么
Nginx是高性能的HTTP和反向代理的服务器,处理高并发的能力是非常强大的,能够经受住高负载的考验,有报告表名能支持高达50000个并发连接数
Nginx可以用来做什么
1、正向代理
需要在客户端配置代理服务器才能去访问特定的网站
2、反向代理
对外只暴露反向代理服务器的 ip 端口 隐藏了真实服务器的 ip
3、负载均衡
用户请求量过大服务器处理不过来,可能造成请求的阻塞,可以增加服务器的数量,然后将用户的请求分发到各台服务器就可以做到负载均衡
4、动静分离
静态资源由Nginx直接返回减少服务器压力
Nginx 的安装
Linux 本地安装
准备工作
官网下载Nginx安装包
http://nginx.org/en/download.html
开始安装
1、安装pcre 依赖包
https://sourceforge.net/projects/pcre/files/pcre/8.37/pcre-8.37.tar.gz/download?use_mirror=nchc
下载之后使用xftp将压缩包放到linux指定目录并解压 tar -zxvf pcre-8.37.tar.gz
解压后进入pcre-8.37目录指定./configue 命令 编译完成 运行make && make install 如果提示make: command not found 先安装make yum -y install gcc automake autoconf libtool make 再安装gcc yum install gcc gcc-c++
2、安装 openssl 、zlib 、 gcc 依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
3、安装nginx
解压压缩包
执行./configure
执行 make && make install
4、运行nginx
cd 到nginx bin 目录
cd /usr/local/nginx/sbin/
指定配置文件启动
执行./nginx -c /major/nginx/conf/mynginx.conf
可以看到已经有nginx进程了
访问试试
访问成功
注意:如果你的虚拟机防火墙没有关闭要把80 端口开放出来
firewall-cmd --list-all 查看已开放的端口
firewall-cmd --add-port=80/tcp --permanent 开放端口
firewall-cmd –reload 重启防火墙
docker安装并挂载目录
1、拉取镜像
docker pull nginx:1.20
2、随便启动一个容器
docker run -p 80:80 --name nginx -d nginx:1.20
3、在本地创建目录并复制nginx内部文件
mkdir /major/nginx
然后将nginx中的文件复制出来最后的 . 不要忘记加了
docker cp nginx:/etc/nginx .
然后在外部 /major/nginx 有了一堆文件
4、停掉并删除原来的nginx
docker stop nginx | docker rm nginx
5、重新运行一个nginx
docker run -d -p 80:80 --name nginx
-v /major/nginx/conf:/etc/nginx
-v /major/nginx/logs:/var/log/nginx
-v /major/nginx/html:/usr/share/nginx/html nginx:1.20
到这里 nginx就已经挂载完成!!!!!!!!!!!!
常用命令
1、./nginx -c /usr/local/nginx/conf/nginx.conf #指定配置文件启动
2、./nginx -s stop #停止nginx
3、./nginx -s reload -c /usr/local/nginx/conf/nginx.conf #重新加载
4、./nginx -v 查看版本号
配置文件详解
配置文件位置
cd /usr/local/nginx/conf
包含三个部分
1、全局块
全局块:配置服务器整体运行的配置指令
比如 worker_processes 1;处理并发数的配置
2、events块
影响 Nginx 服务器与用户的网络连接
比如 worker_connections 1024; 支持的最大连接数为 1024
3、http块
包含两个部分
http 全局块
server 块
反向代理
准备工作
需要启动一台可供测试tomcat 服务器,笔者是使用docker 挂载启动的。
步骤如下
docker pull tomcat:8.0.5
随便启动一个tomcat
docker run -d -p 8080:8080 --name tomcat tomcat:8.0.5
本地创建tomcat 文件夹
mkdir /major/tomcat
将tomcat内部的文件拷贝出来
docker cp tomcat:8.0.5:/usr/local/tomcat .
停止并删除原tomcat容器
docker stop tomcat:8.0.5
docker rm tomcat:8.0.5
重新启动一个tomcat容器
docker run -d --name tomcat -p 8080:8080
-v /major/tomcat/logs:/usr/local/tomcat/logs
-v /major/tomcat/conf:/usr/local/tomcat/conf
-v /major/tomcat/lib:/usr/local/tomcat/lib
-v /major/tomcat/bin:/usr/local/tomcat/bin
-v /major/tomcat/webapps:/usr/local/tomcat/webapps
tomcat:8.0.5
docker ps 查看容器运行状态
ok! tomcat 成功运行,到此准备工作完成 配置反向代理
vi /usr/local/nginx/conf/nginx.conf
找到http块下面的server块 进行以下修改
listen: 监听的端口号
server_name: 本机ip
location / : 匹配的路由
proxy_pass: 代理转发的地址
修改配置后重新加载nginx
./nginx -s reload -c /usr/local/nginx/conf/nginx.conf
尝试访问80 端口看看是否可以代理到tomcat
ok!访问80端口可以查看到tomcat 默认的欢迎页面,说明代理成功!!
了解了反向代理的基本配置使用,下面我们做一个小练习
要求:当我再浏览器访问9001端口且路由是/edu/a.html则代理到8080端口的tomcat,如果路由为/vod/a.html 则代理到8081端口的tomcat
准备工作
两台tomcat服务器 一台nginx 到这里小伙伴们应该已经有了一台nginx和tomcat了吧,所以我们再准备一台8081端口的tomcat即可
8081端口的tomcat的文件挂载可参考上面8080tomcat服务器步骤,这里笔者就略过了
启动8081 端口的tomcat
docker run -d --name tomcat8081 -p 8081:8081
-v /major/tomcat8081/logs:/usr/local/tomcat/logs
-v /major/tomcat8081/conf:/usr/local/tomcat/conf
-v /major/tomcat8081/lib:/usr/local/tomcat/lib
-v /major/tomcat8081/bin:/usr/local/tomcat/bin
-v /major/tomcat8081/webapps:/usr/local/tomcat/webapps
tomcat:8.0.5
docker ps 查看运行的容器
可以看到两台都已经成功运行,下面最后一步 分别进入到两台tomcat服务器的webaps文件夹下面,8080创建一个edu文件夹里面存放一个a.html 内容就一句话8080!!! 即可,8081则创建一个vod文件夹也存放一个a.html 内容为8081!!!
重新启动两台tomcat
配置nginx 配置文件
配置完成后重新加载nginx
./nginx -s reload -c /usr/local/nginx/conf/nginx.conf
重新加载成功,尝试访问9001/edu/a.html
访问9001/vod/a.html
可以看到路由不同,nginx 也已经帮我们代理转发到了不同服务器,到此,nginx反向代理的基础使用就告一段落,接下来我们再演示一下负载均衡如何配置
负载均衡
负载均衡是什么上面已经说过了,在这里就不多赘述了,直接上手
准备工作
将8081服务器webapps下面的vod文件夹名称也改为edu 这么做的目的是为了方便我们后续的测试
mv vod edu
不要忘了重启!
nginx配置
upstream 要配置在http全局块中否则nginx无法启动
配置完成后重新加载nginx
测试
可以看到负载均衡的配置已经生效
nginx分配服务的策略
1、轮询(默认)
每个请求按照时间顺序分配到不同的服务器,如果服务器down掉,能够自动剔除
2、weight
weight 代表权重默认为 1,权重配置的越高被分配的请求数就越多
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,意思就是这个用户的请求第一次被分配到了那台服务器,以后这个用户的请求还是分配到那台服务器
4、 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
动静分离
关于动静分离是什么上面也已经说过了 这里也是直接上手
准备工作
在Linux本地创建一个文件夹用来保存静态资源文件
内容随便给一个,我给的是static的字样
准备工作完成,配置nginx
重新加载nginx 访问/html/index.html
请求到了
在配置一个图片的
先创建目录存放一个图片
然后配置nginx
访问/image/1.jpg
成功访问
如果访问之后不想看到图片 想展示目录并下载可以配置 autoindex on
再访问 /image
可以看到 目录了
注意:配置动静分离的时候如果你的nginx是在docker中启动的,按照以上描述配置可能会访问404 这里笔者也是踩了个坑 分享给大家避免踩坑
404 原因 docker 内部是访问不到Linux本地目录的 所以root 的配置要改为/usr/share/nginx/html 即可正常访问
以上就是对动静分离配置的基本使用
浅谈nginx原理
nginx 会有两个进程
1、相当于是生产厂商 master 不做事情 将事情分配给worker 当master拿到任务后会通知所有worker 这时所有worker会争抢任务 抢到任务的worer再去反向代理或者负载均衡
该机制称为争抢机制
2、相当于是经销厂商 worker
nginx启动时可以有一个master 和 多个worker 我们之前使用的一直是一个master 一个 worker
一个master 和多个 worker的好处
1、可以使用nginx -s reload 热部署 不需要重启nginx就可以加载已修改的配置文件 利于nginx进行热部署操作
2、对于每个worker都是一个独立的进程省去了因为加锁所占用的资源 因为是独立线程所以可能因程序bug异常退出只会导致当前worker内的所有请求失败 不会影响到其他资源 降低了风险
设置多少个worker最合适 ?
Nginx 同 redis 类似都采用了io多路复用的机制(windows系统中将会失效)
每个worker的线程都可以把cpu的性能发挥到极致 所以worker 数和服务器的cpu数量想等是最为适宜的 通俗点几核设置几个worker
worker绑定cpu
4 worker 绑定 4核
worker cpu affinity 0001 0010 0100 1000
4 worker 绑定 8核 中的4核
worker cpu affinity 00000001 00000010 00000100 00001000
连接数 worker_connection
第一个:发送请求,占用了几个worker的连接数
答:占用了2个或者4个 为什么? 访问静态资源 一来一回 2个 如果请求静态资源又请求动态资源 双向来回 就是占用了4个连接数
第二个:nginx里面有一个master 四个worker 每个worker支持最大的连接数是1024个 master支持最大的并发数是多少
答:普通静态访问 2048 http反向代理访问 1024
以上就是对nginx基础使用的总结!!笔者是看完了B站尚硅谷的nginx课程 在这里做的一个笔记 想了解更详细的内容 大家也可以去B站观看!