2021-08-02~2021-08-06
工作总结
前言
本周学习nginx的基础·。
技术探索
1.Nginx功能介绍
1.1 Nginx简介
Nginx是一个高性能的HTTP和反向代理web服务器。它专为性能优化开发而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载(有报告表明:其能支持高达5w个并发连接数)
优点:占有内存小,并发能力强。支持热部署,及时运行多月也不用重新启动,可以在不间断服务的情况下,对软件进行升级。
1.2 反向代理
1.2.1 正向代理
1.2.2 反向代理
客户端对反向代理是没有感知的,客户端在访问过程中并不用添加任何的配置。客户端通过向反向代理服务器发送请求,由反向代理服务器去选择目标服务器获取数据,然后返回给客户端。(代理服务器与目标服务器就是同一个服务器,暴露的是代理服务器地址,真是的服务器IP被隐藏)
1.3 负载均衡
单个服务器解决不了的问题,我们就增加服务器的数量。然后将请求分发到各个服务器上,将负载按照配置分发到不同的服务器,也就是我们所说的负载均衡。
1.4 动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低单个服务器的压力。
2.Nginx使用
2.1 Nginx安装
可阅读我在学习过程中总结的linux安装nginx的教程
2.2 常用命令
- 使用nginx的操作命令时:应当先进入nginx的目录(/usr/local/nginx/sbin)
- 查看nginx版本号
[root@hadoop1 sbin]# ./nginx -v
nginx version: nginx/1.12.2
- 启动nginx
[root@hadoop1 sbin]# ./nginx
[root@hadoop1 sbin]# ps -ef | grep nginx
root 74714 1 0 17:45 ? 00:00:00 nginx: master process ./nginx
nobody 74715 74714 0 17:45 ? 00:00:00 nginx: worker process
root 74717 12658 0 17:45 pts/0 00:00:00 grep --color=auto nginx
- 关闭nginx
[root@hadoop1 sbin]# ./nginx -s stop
[root@hadoop1 sbin]# ps -ef | grep nginx
root 74704 12658 0 17:44 pts/0 00:00:00 grep --color=auto nginx
- 重新加载nginx
[root@hadoop1 sbin]# ./nginx -s reload
2.3 配置文件
- 文件位置
cd /usr/local/nginx/conf
- 配置文件组成
- 全局快
从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令
例如:
worker_processes 1; #值越大,可以支持并发的量也越多
- events块
这块涉及的指令主要影响nginx服务器与用户的网络连接
例如:
worker_connections 1024; #nginx支持的最大连接数
- http块
包含:http全局块 server块
http {
#http全局块
server {
#server块
}
}
}
3.配置实例
3.1 反向代理实例一
- 在liunx安装tomcat
将tomcat安装包放入linux系统钟,然后进行解压。
到bin目录钟启动tomcat
./startup.sh
firewall-cmd --add-port=8080/tcp --permanent #打来8080端口
- 修改本机的host配置
- 配置nginx并启动
- 结果
3.2 反向代理实例二
- 在liunx安装两个tomcat
- 配置nginx
- 结果
3.3 负载均衡
负载均衡分配服务器的策略:
1.轮询(默认策略):每个请求按照时间顺序分配,如果某个服务器挂了,就自动剔除。
2.weight(权重策略):权重越高的被分配的越多
3. ip_hash:直接在upstream中书写ip_hash;每个请求按访问ip的hash结果分配。每个访客固定访问一个后端服务器,可以解决session问题。
4. fair(第三方):直接在upstream中书写fair;按后端服务器的响应时间分配响应时间越短优先分配。
实例
- 在liunx安装两个tomcat
- 配置nginx配置文件
http {
upstream myserver{
server: 192.168.183.129:8080;
server: 192.168.183.129:8081;
}
server {
listen 80;
server_name 192.168.183.129;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
}
3.4 动静分离
通过location指定不同的后缀名实现不同的请求转发。通过expires(写在laction中)参数设置,可以使浏览器缓存过期时间。(具体expires定义:是给一个资源设置一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是都过期即可。这种方法很适合不经常变动的资源。例如我们在这里设置一个3d,表示这三天内访问这个url,发送一个请求,对比服务器的资源是否有变化,则不会从服务器抓取,返回状态码304,如果有修改则会重新下载返回状态码200)
- 将静态文件存放到 /usr/data/的不同文件夹中
- 配置nginx
location /www/ {
root /usr/data/; #静态文件路径
index index.html index.htm;
}
location /image/{
root /usr/data/; #静态文件路径
autoindex on;
}
- 结果
3.5 高可用集群
安装keepalived命令
yum install keepalived -y
操作过程(以下操作针对两台服务器)
- 配置keepalived文件
cd /etc/keepalived/
vi keepalivec.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.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL #ip地址
}
vrrp_script chk_http_port { #检测脚本以及权重的参数
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
#虚拟ip的配置
vrrp_instance VI_1 { state BACKUP # 备份服务器上将 MASTER 改为 BACKUP interface ens33 //网卡 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { 192.168.17.50 // VRRP H 虚拟地址
}
}
- 配置校验文件
#!/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
- 启动nginx跟keepalived
systemctl start keepalived.service #启动keepalived
location指令说明
用于匹配url,语法如下:
location [ = | ~ | ~* | ^~] url {
}
- = :用于不包含正则表达式的url前,要求请求字符串与url严格匹配,如果匹配成功,就停止继续向下搜索并立即处理请求
- ~ :用于表示url包含正则表达式,并且区分大小写。
- ~* :用于表示url包含正则表达式,并且不区分大小写。
- ^~ : 用于不含正则表达式的url前,要求nginx服务器找到标识url和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则url和请求字符串做匹配。
注意:如果url包含正则表达式,则必须要有~ 或者~*标识。
1.Nginx原理
- master进程worker进程
- worker如何工作
worker采用争抢的机制 - 一个master多个worker的好处
- 可以使用nginx -s reload 热部署,利于nginx做热部署(对于没有任务的work先做部署,从而实现热部署的效果)
- 每个worker 都是独立的进程,不需要加锁,节省锁的开销,其次采用独立的进程,各个work之间互不影响,有worker经常退出后,服务不会中断。而master经常会重新启动新的进程。
- 设置多少个worker合适
每个worker线程都可以把一个cpu的性能发挥到极致,所以worker的数量跟服务器的cpu数量相等最为适宜。 - 连接数 work_connection
- 一个请求,占用worker的几个链接数? 2/4个
静态资源:worker 1.接收请求并2.指向静态资源服务器(所以是两个)
如果需要访问tomcat:1.worker接收请求 2.访问tomcat 3.接收tomcat的返回 4.返回客户端 (所以是四个) - nginx有一个master,有4个work,每个work支持的最大连接数1024,支持最大并发量是多少
普通静态访问最大并发:worker最大连接数*worker个数/2;
http作为反向代理的话,最大并发:worker最大连接数*worker个数/4;
总结
1、之前对于nginx比较默认在配置的时候都是查资料并没有系统的学习一遍,所以本周就对nginx进行系统的学习虽然还不够深刻但是也是收益良多。
2、后续应该对nginx在更多情境下的配置进行学习。
踏实学习,不骄不躁--zwx