keepalived+nginx 实现高可用
corosync+nginx 实现高可用
keepalive
nginx: 1. web服务器(具有web服务器最基本的功能)
2.反向代理:web、mail
nginx实现了模块化
varnish、squid
nginx缓存:缓存在磁盘
httpd缓存:apache缓存在磁盘、内存中
nginx热部署,平滑升级
一个主进程和多个工作进程,工作进程以非特权用户运行。
nginx启动的时候,内部会生成一个master主进程和多个worker进程。
master主进程的工作:1.读取并验证配置信息
2.创建、绑定、关闭套接字
3.启动、终止、维护worker进程的个数
4.无需终止服务而重新配置工作特性
5.控制非中断式程序升级、启用新的二进制程序并在需要时回滚至老版本
6.重新打开日志文件
7.编译嵌入式perl脚本
worker进程主要完成的任务:
1.接收、传入并处理来自客户端的连接
2.提供反向代理及过滤功能
3.nginx任何能完成的其他任务
cache loader进程主要完成的任务:
1.检查缓存存储中的缓存对象
2.使用缓存元数据建立内存数据库
cache manager进程的主要任务:
1.缓存的失效及过期检查
nginx配置有几个不同的上下文:main (主配置文件)、http 、server 、 upstream(实现反向代理)、 location 、 mail(实现邮件服务的反向代理)
nginx:每一个server定义一个虚拟主机i
url:
location URL { }: 对当前路径及子路径下的所有对象都生效;
location =URL { }: 精确匹配指定的路径,不包括子路径,因此,只对当前资源生效; 优先级最高A
location ~URL{ }: 模式匹配,区分字符大小写
location ~* URL{ }: 模式匹配url,此处的url可使用正则表达式,~区分字符大小写,~*不区分字符大小写; 优先级E
location ^~ URL{ }: 不使用正则表达式 优先级D
第一个/为根,第二个/为根下的路径
location /url/ { 优先级C
root "/web/htdocs"; url就是root指定的路径 ,及url就等于/usr/nginx/web/htdocs;
}
等同于
location /htdocs/ { 优先级C
root /web; url就是root指定的路径 ,及url就等于/usr/nginx/web/htdocs;
}
location / {
root html; 相对路径,相对于nginx默认安装路径而言,即 /usr/nginx/html,在这下面会有index定义的页面 优先级B
index index.html index.htm; 主页面:
}
location =/50x.html{ /表示nginx默认根路径,这一个location 的完整地址意思就是,在/usr/html下面会有50x.html这一个网页文件 优先级最高A
root html;
}
访问控制: 默认允许所有主机访问
allow ip地址; 小范围在上面 允许某个主机访问
deny all; 大范围在下面 拒绝所有主机访问 (包括本机也拒绝了),如果只想拒绝某个主机访问,则使用格式 deny 拒绝访问的主机ip;
nginx加入认证:
htpasswd: 第二次创建用户不能使用 -c 选项
步骤:
yum install httpd
htpasswd -c -m /etc/nginx/.users tom
然后进入nginx的配置文件nginx.conf ,在location里面加入后面两个auth_.....
location / {
index a.html;
deny 192.168.108.129;
auth_basic "Restricted Area...";
auth_basic_user_file /etc/nginx/.users;
}
最后需要重新加载和重启nginx配置文件才生效,即
systemctl reload nginx;
systemctl restart nginx;
然后访问nginx的ip地址即可。
活动连接数:
在配置文件中加入
location /status {
stub_status on;
}
然后浏览器访问 ip/status 即可
================================================================
nginx支持ssl
生成证书时,注意语法,需要空格
(umask 077; openssl genrsa 2048 > private/cakey.pem)
[root@node2 CA]# (umask 077; openssl genrsa 2048 > private/cakey.pem)
Generating RSA private key, 2048 bit long modulus
........+++
............................................................+++
e is 65537 (0x10001)
==============================================nginx================================================================================
nginx: map
event-driver:一个进程响应多个请求,单线程进程
io模型:阻塞、非阻塞、同步、异步;
同步阻塞、异步阻塞(io复用、event-driver)、异步非阻塞(aio)
mem cache:缓存关系型数据库中的数据
================================================================nginx反向代理==============================================================
首页静态化
使用服务器组
可以实现分发的服务器:
lvs(4层协议):可以在短时间内转发数百万请求(配置复杂)
nginx(七层协议):(有对系统要求量小,但转发能力不如haproxy)(有缓存功能)
haproxy(七层协议):
反向代理:
正向代理:代理客户端访问目标服务器
nginx配置文件 (分段配置)
main,
worker_process work进程数
error_log
user
group
events{ 事件驱动
}
httpd{ 关于http相关的配置
}
server{ 虚拟主机
}
location{ 上下文
url访问属性
把root换成proxy_pass,就可以定位到后端服务器上了
}
location [op] URL{
}
模式匹配:~ 区分大小写 , ~* 不区分大小写 , ^~ , = 定向到指定内容
http://172.16.100.11:8080/bbs/ ; 模式匹配中,后面的反向代理不能精确到具体的路径。所以不能写 /bbs
server{ 后端服务
}
location可以放在server中,也可以放在httpd中
sever只能放在httpd中
server不能嵌套,location可以嵌套。
每一个指令都要分号 ; 结尾
upstream模块:定义在server之外。
上游服务器
一个location里面定义多个服务器,也可以实现负载均衡的效果
每一个server定义每一个后端服务器
没有权重,权重为0,不做负载均衡
有了权重,加强论调,还可以选择端口映射
定义server的时候,只能跟server地址或者server名称,不能使用http,不能使用协
健康状态检查:
server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 max_fails=2 fail_timeout=2;
fail_timeout:max_fails次失败后,暂停的时间
ip_hash: 根据客户端请求的原地址做hash,只要hash相同就一直分发到同一个客户端
nginx支持的负载均衡算法:
round-robin (默认使用) :如果定义了权重,默认使用round-robin。如果没有设置权重,则这个服务器没有参加负载均衡。
ip_hash :在server内标明 ip_hash即可 ,只要第一次去到这个页面,那么接下来只要hash值相同去到的都是这个页面。
least_conn(最少连接,会检查客户端的连接状态,挑一个连接数最少的进行连接) :
在有ip_hash的情况下,不能使用 backup ,要不第一次去到这个backup的错误页面,接下来都去到了这个错误页面。
netstat -ant :当前客户端的连接数量
netstat -ant|grep 80
==================================================nginx缓存=============================
对于nginx来说,每一种应用所使用的缓存都不一样
cache: 共享内存(存储键和缓存对象元数据)
磁盘空间:存储数据
对于缓存服务器来说,磁盘的缓存性能是至关重要的
定义缓存空间: proxy_cache_path
proxy_cache_path:
proxy_cache_valie 200 10n; 对200缓存10分钟