声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
2. 由于是个人总结, 所以用最精简的话语来写文章
3. 若有错误不当之处, 请指出
-
Nginx C语言编写, 战斗民族俄罗斯人所创, 是高性能的 HTTP 和反向代理的Web服务器,处理高并发能力是十分强大的,,有报告表明能支持高达 50,000 个并发连接数
-
启动与关闭:
cd /usr/local/nginx/sbin
./nginx -v
./nginx
./nginx -s stop
./nginx -s reload
-
配置文件:
cd /usr/local/nginx/conf/nginx.conf
- 全局块:配置服务器整体运行的配置指令
比如 worker_processes 2 worker个数,建议分配和CPU核数一样的数量 - events 块:影响 Nginx 服务器与用户的网络连接
比如 worker_connections 1024 支持的最大连接数为 1024 - http 块:
还包含两部分:http 全局块与server 块
- 全局块:配置服务器整体运行的配置指令
-
三大作用: 反向代理, 负载均衡, 动静分离
1. 反向代理
-
反向代理配置
2. 负载均衡
-
负载均衡配置
-
负载均衡策略
- 第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。 - 第二种 weight
weight 代表权重默认为 1,权重越高被分配的客户端越多 - 第三种 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器 - 第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
- 第一种 轮询(默认)
3. 动静分离
-
动静分离请求图示:
-
静态资源配置
- index index.html index.php 代表首页展示,第一个找不到的话会去找第二个
- Nginx默认是不允许列出整个目录的
- autoindex on; 显示整个目录(有…,像Linux一样)
- autoindex_exact_size off; 默认为on,单位是bytes; 改为off后,单位是kB或者MB或者GB
- autoindex_localtime on; 默认为off,显示的文件时间为GMT时间。
- 通过 location 指定不同的后缀名实现不同的请求转发。
location匹配规则
~ 正则匹配, 区分大小写
~* 正则匹配, 不区分大小写
^~ 精确匹配, 如果该选项匹配,只匹配该选项,不匹配别的选项
= 精确匹配, 这个不匹配其他人还有机会
@ 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
优先级: = > ^~ > ~ ~*
-
通过 expires 参数设置,可以使浏览器缓存过期时间。
是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。
例如设置 3d,表示在这 3 天之内访问这个 URL, 发送一个请求,比对服务器该文件最后更新时间没有变化。
- 如果没变则不会从服务器抓取, 返回状态码 304;
- 如果有修改则直接从服务器重新下载,返回状态码 200
4. Nginx原理
1、一个Nginx的 mater 和 worker
2、worker 如何进行工作的
3、一个 master 和多个 woker 有好处
(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不
会造成服务中断
4、设置多少个 woker 合适
worker 数和服务器的 cpu 数相等是最为适宜的
5、连接数 worker_connection
-
发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个 -
nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?
答案: 普通的静态访问最大并发数是: worker_connections * worker_processes /2
而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4
5. Nginx集群
对外暴漏同网段虚拟ip(相当于用户访问虚拟ip再访问真实ip,对真实ip的一种隐藏)
下载keepalived用来管理集群(定时检测宕机的,进行主从(MASTER BACKUP)的管理)
- 打开/etc/keepalived/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 #唯一的, 127.0.0.1 LVS_DEVEL是提前配好的对应127.0.0.1
}
vrrp_script chk_http_port {
script “/usr/local/src/nginx_check.sh”
interval 2 #(检测脚本执行的间隔)
weight 2
}
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 虚拟地址
}
}
- 在/usr/local/src 添加检测脚本
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];
then /usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];
then killall keepalived
fi
fi