nginx安装
第一步, 安装 pcre
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
解压文件
tar -zxvf pcre-8.37.tar.gz
./configure 完成后,回到 pcre 目录下执行 make,
第二步, 安装 openssl
第三步, 安装 zlib
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
第四步, 安装 nginx
1、 解压缩 nginx-xx.tar.gz 包
2、 进入解压缩目录, 执行./configure。
3、 make && make install
设置nginx的环境变量
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
查看开放的端口号
firewall -cmd --list-all
设置开放的端口号
firewall -cmd --add-service=http –permanent
sudo firewall -cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd –reload
nginx的常用指令
## ( 1)启动命令
在/usr/local/nginx/sbin 目录下执行 ./nginx
因为配置了环境变量,可以直接使用nginx
## ( 2)关闭命令
在/usr/local/nginx/sbin 目录下执行 ./nginx -s stop
( 3) 重新加载命令 这个是热加载的方式
在/usr/local/nginx/sbin 目录下执行 ./nginx -s reload
tomtcat的安装目录
/usr/src/apache-tomcat-9.0.52/bin
配置反向代理(1)
先要在Windows的C:\Windows\System32\drivers\etc下的hosts里面加上192.168.58.130 www.123.com
注意这个要用editplus打开,管理员运行
这个是在nginx.config
这个nginx的配置文件是在**/usr/local/nginx/conf**
这个proxy_pass http://127.0.0.1:8080这个是要转发的路径
Nginx配置实例-反向代理(2)
实现效果:使用 nginx 反向代理, 根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082
这个是在nginx.conf里面配置
server {
listen 9001;
server_name 192.168.58.130;
# 这个~表示的是后面是正则表达式的意思,如果路径中有edu就跳转到http://127.0.0.1:8080
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
开放对外访问的端口9001 8080 8081
查看开放的端口号
firewall-cmd --list-all
打开指定的端口号
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5yM9ZW84-1642859696216)(https://github.com/losserlong/pictures/blob/main/20220121101059.png?raw=true)]
nginx实现负载均衡的效果
实现nginx的负载均衡效果
1、实现效果
(1)浏览器地址栏输入地址http://192.168.17.129/edu/a.html,负载均衡效果,平均8080和8081端口中2、准备工作
(1)准备两台tomcat服务器,一台8080,一台8081
(2)在两台tomcat里面webapps,目录中,创建名称是edu文件夹,在edu,文件夹中创建页面a.html,用于测试3、/usr/local/nginx/conf下面配置nginx的配置文件
这个是在nginx.conf文件的配置
负载均均衡效果
nginx的负载均衡策略
**1、**轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、 weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
upstream server_pool{ server 192.168.5.21 weight=10; server 192.168.5.22 weight=10;
}
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如: (可以用来解决session共享的问题)
upstream server_pool{ ip_hash; server 192.168.5.21:80; server 192.168.5.22:80; }
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{ server 192.168.5.21:80; server 192.168.5.22:80; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bz51irlL-1642859696218)(file:///C:/Users/losser/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif)] fair; }
Nginx配置实例-动静分离
什么是动静分离
Nginx
动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx 处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码
304,如果有修改,则直接从服务器重新下载,返回状态码 200。
动静分离示意图
准备工作
1)在Linux系统中准备静态资源,用于进行访问
2)具体配置
(1)在nginx配置文件中进行配置,这里面的autoindex on表示的是列出文件夹中的内容
4)最终测试
(1)浏览器中输入地址
http://192.168.60.10/image/author.jpg
也能访问
nginx的高可用
什么是高可用
单点故障(英语:single point of failure,缩写SPOF)是指系统中一点失效,就会让整个系统无法运作的部件,换句话说,单点故障即会整体故障。
高可用性(英语:high availability,缩写为 HA),IT术语,指系统无中断地执行其功能的能力,代表系统的可用性程度。是进行系统设计时的准则之一。高可用性系统与构成该系统的各个组件相比可以更长时间运行。
高可用性通常通过提高系统的容错能力来实现。定义一个系统怎样才算具有高可用性往往需要根据每一个案例的具体情况来具体分析。
(1)需要两台nginx服务器
(2)需要keeplived(用来检测nginx服务器是否还活着)
(3)需要虚拟IP
配置高可用的准备工作
- 要有两个虚拟机的环境(我这里是直接用第一台进行克隆)
一台是192.168.60.11
另一台是192.168.60.10
- 在两台服务器上安装nginx
- 在两台服务器上安装keeplived,使用yum命令进行安装
yum install -y keepalived
安装完成之后,keepalived的配置文件的位置/etc/keepalived
完成高可用的配置(主从配置)
(1)修改/etc/keepalived/keepalived.conf 的配置文件
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.60.11
smtp_connect_timeout 30
router_id LVS_DEVEL #访问主机
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight -20 # 权重,如果当前的条件成立,就将当前的主机的权重降低20
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡名称
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小,值越大,优先级越高
advert_int 1 # 发送心跳,检测主备服务器是否还活着,这里是1秒
authentication { # 权限校验的方式用的是密码四个1
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.60.50 // VRRP H 虚拟地址
}
}
(2)在/usr/local/src下面添加检测nginx是否还活着的脚本nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #nginx启动脚本的位置
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
(3)把两台服务器上的nginx和keepalived启动
启动nginx:./nginx
启动keepalived:systemctl start keepalived.service
(5)最终测试
(1)在浏览器地址栏中输入虚拟的IP地址192.168.60.50,说明虚拟IP绑定是正确的
(2)把主服务器(192.168.60.10)的nginx和keepalived停止,发现ngin已经切换到了备份服务器上,而且浏览器访问,还是有nginx(因为当主服务器挂掉之后,keepalived通过脚本检测到备份服务器还活着,就切换到备份服务器)
nginx的原理解析
master和worker
ps -ef | grep nginx
这个master相当于是一个领导,一般不做具体的工作,一般是用来分配任务。master分配任务给手下的worker,worker去做具体的事情
worker是如何进行工作的
worker是使用争抢的机制,抢到一个任务,就调用tomcat或者反向代理完成具体操作操作。
一个master和多个worker的好处
- 可以使用nginx -s reload 热部署的方式,利于nginx进行热部署操作
- 每个worker是一个独立的进程,如果说有其中的一个worker出现问题,那其他的worker独立的,继续进行争抢,实现请求过程,不会造成服务的中断。
首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。需要设置多少个 worker
Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。**所以 worker 数和服务器的 cpu 数相等是最为适宜的。**设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。
一些参数设置
设置worker的数量和cpu的数量相等是最为适宜的
连接数worker connection
第一个:发送请求,占用了worker的几个连接数
2个或者4个
连接数:
连接数 worker_connection
这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数,对于 HTTP 请求本地资源来说,能够支持的最大并发数量是 worker_connections * worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
如果是静态资源的话就是两个连接数
,
如果是要访问tomcat就是四个连接数
第二个: nginx,有一个master,有四个woker,每个woker支持最大的连接数据1024,支持的最大并发数是多少? (1024*4)/2(静态访问) 或者 (1024*4)/4 (作为反向代理)