LVS+Nginx高可用集群---Nginx进阶与实战

1.Nginx中解决跨域问题

两个站点的域名不一样,就会有一个跨域问题。

跨域问题:了解同源策略:协议,域名,端口号都相同,只要有一个不相同那么就是非同源。

CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。

跨域指的是浏览器不能执行其它网站的脚本。是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。

前端有跨域吗?有。请求资源跨域就有。记住同源策略问题。

Nginx跨域配置:

#允许跨域请求的域,*代表所有

add_header 'Access-Control-Allow-Origin' *;

#允许带上cookie请求

add_header 'Access-Control-Allow-Credentials' 'true';

#允许请求的方法,比如 GET/POST/PUT/DELETE

add_header 'Access-Control-Allow-Methods' *;

#允许请求的header

add_header 'Access-Control-Allow-Headers' *;

2.nginx中配置静态资源防盗链

Nginx配置信息:

java 复制代码
#对源站点验证
valid_referers *.nly.com; 
#非法引入会进入下方判断
if ($invalid_referer) {
    return 404;
} 

解析:匹配上面的验证规则(域名为.nly.com)

匹配的话会继续往下加载location配置。

没有匹配的话,就会返回404

3.nginx的模块化设计解析

Nginx core:实现了底层的通信协议。也为其他的一些模块和nginx的进程内容提供一个运行时的环境(类似于JVM),协调其他模块。

Event module:epoll.操作操作系统层面的事件处理机制。

Phase handler:处理客户端一些请求,以及一些相应内容的响应,

Output filter:过滤器。过滤内容返回浏览器。类比gzip(压缩模块)

Upstream:反向代理模块

Load balancer:负载均衡器。实现集群,实现负载均衡的配置。

Extend module:第三方模块。

nginx-1.22.0安装包目录下的内容。

4.四层,七层DNS负载均衡

四层负载均衡 :主要是基于ip和端口的负载均衡。原理是转发请求到后台的服务器。它是负责转发,并且会记录连接是由那个服务器处理的,后续这个连接的请求会由同一台去处理。 (相当于常连接)

F5硬件负载均衡:成本高,稳定不错。商业级别的负载均衡。

LVS四层负载均衡:linux内核负载均衡。主要是用来转发请求的。

Hapooxy四层负载均衡:灵活性高。

Nginx四层负载均衡。

七层负载均衡 :是基于url和ip的负载均衡。基于应用层,针对于http协议的负载均衡。

Nginx七层负载均衡:

Haproxy七层负载均衡:灵活性高

Apache七层负载均衡:并发不如nginx。

四层多用LVS,七层多用nginx.

七层主要是针对http协议,适用于web服务器,比如tomcat,Apache,nginx。七层会处理请求,比如:压缩css,js等

四层主要是针对tcp/udp协议。主要运用于转发请求而不是处理。

DNS地域负载均衡:

5.JMet测试单节点与集群的并发异常率

Jmeter工具:测试网站性能,apache.

使用jmeter工具。注意点:如何使用jmeter?配置环境变量。安装时候需要修改哪些变量(注册表的信息,添加注册表对应位置的权限,创造对应的文件,然后修改了#server.rmi.ssl.disable=false 去掉注释 修改末尾的false-->true Jmeter)

测试单个tomcat运行:(用户即线程)

1.50个用户,100次请求--无异常

2.200个用户,100次请求--异常率高达18.51%。

集群测试:

测试结果对比:

区别在于平均值,异常率,以及吞吐量。

正常情况下,公司异常率有临界点。超过临界点,并发就认为已经封顶了。然后就需要做一些处理,例如,硬件配置的升级,扩容。

6.负载均衡

负载均衡值轮巡

Nginx访问多台服务器时,采用的是轮询的方式。

负载均衡之权重:

根据机械性能配置权重。数值越小,访问的频率越低。

7.upstream 指令

upstream 指令参数值-maxconns

max_conns:限制每台server的连接数,用于保护避免过载,可起到限流的作用

配置模板:设置为1,避免使用到共享内存

worker进程设置1个,便于测试观察成功的连接数

java 复制代码
worker_processes  1;

upstream tomcats {
        server 192.168.1.173:8080 max_conns=2;
        server 192.168.1.174:8080 max_conns=2;
        server 192.168.1.175:8080 max_conns=2;
}

测试:jmeter配置间隔时间为0.

当配置的连接数达到最大连接数(3*2=6),就无法处理请求了。

slow_start:将不健康的服务器变成健康的服务器

配置参考如下:

upstream tomcats {

server 192.168.1.173:8080 weight=6 slow_start=60s;

server 192.168.1.190:8080;

    server 192.168.1.174:8080 weight=2;
    server 192.168.1.175:8080 weight=2;

}

down:用于标记服务结点不可用

配置模板:

upstream tomcats {

server 192.168.1.173:8080 down;

server 192.168.1.190:8080;

    server 192.168.1.174:8080 weight=1;
    server 192.168.1.175:8080 weight=1;

}

Backup:表示当前服务器节点是备用机,只有在其他服务器都宕机以后,自己才会加入集群中,被用户访问到。

配置模板:

upstream tomcats {

server 192.168.1.173:8080 backup;

server 192.168.1.190:8080;

    server 192.168.1.174:8080 weight=1;
    server 192.168.1.175:8080 weight=1;

}

max_fails:表示失败几次,则标记server已经宕机,剔除上游服务。

fail_timeout:表示失败的重试时间。

max_fails=2 fail_timeout=15s

则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。

8.使用keepalived提高吞吐量

配置信息:

Keepalive:表示的是要保持的连接数(将一些链接作为常链接)

keepalived: 设置长连接处理的数量

proxy_http_version:设置长连接http版本为1.1

proxy_set_header:清除connection header 信息

官方模版:

自定义模板:

提升了吞吐量,以及接受跟传输的量(kb)

9.负载均衡原理-ip_hash;url hash 与least_conn

Ip_hash:可以保证用户访问可以请求到上游服务中固定的服务器,前提是用户ip没有发生改变(本质上是根据用户ip hash了以后,根据hash值再分配到一台特定的服务器里)

hash算法:

配置模板:

java 复制代码
upstream tomcats {
        ip_hash;

        server 192.168.1.173:8080;
        server 192.168.1.174:8080 down;
        server 192.168.1.175:8080;
}

具体算法:

可以在/home/software/nginx-1.22.0/src/http/modules目录下看到算法。

当需要临时将一台服务器进行移除时,需要标记该台服务器为down.不能直接移除

当使用hash算法时,算法中使用的是ip地址的前三部分。举例:192.168.56.102 hash算法中使用的是192.168.56来进行计算的
一致性hash算法

hash算法带来的问题:后台服务器的节点的增多或者减少,缓存等问题可以会降低效率

一致性hash算法的高明之处在于:保证绝大多数的请求能访问到原来的计算机节点,仅仅只有一部分的请求会发生变化

(降低节点宕机或者新增节点时,对于用户的影响或者可以说缓存的影响)
负载均衡之url_hash:

原理:hash处理url,然后求模,计算index.(根据index去访问)

配置模板:

upstream tomcats {

url hash

hash $request_uri;

最少连接数

least_conn

server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;

}

server {

listen 80;

server_name www.tomcats.com;

location / {
    proxy_pass  http://tomcats;
}

}

Url:使用www.nly.com/nginx-url-hash/account跟使用www.nly.com/nginx-url-hash/account/的结果不同

负载均衡:Least_conn:根据哪台服务器的连接数最少就请求哪一台。

10.Nginx 控制浏览器缓存

缓存:

浏览器缓存加速单个用户的访问。Nginx缓存,优化在内网的传输(提升所有访问到nginx端的用户;提升访问上游(upstream)服务器的速度;用户访问仍然会产生流量)。(内网请求到不同的服务器,会有带宽的损耗,所以会有请求以及响应的时间)

浏览器缓存,当status显示为304时,表示的是缓存.Expire限制的是过期时间。

通过设置expire定义过期时间。看cache-control选项:

expire设置模板:

java 复制代码
location /files {
    alias /home/imooc;
    # expires 10s;设置过期时间
    # expires @22h30m;设置持续多久
    # expires -1h;距离现在时间的前一个小时已经失效了
    # expires epoch;表示no-cache
    # expires off;默认nginx中的expire处于关闭状态。浏览器端还是有默认的机制的
    expires max;最大时间,即永不过期
}

11.Nginx 反向代理缓存

配置模板:

java 复制代码
# proxy_cache_path 设置缓存目录
#       keys_zone 设置共享内存以及占用空间大小
#       max_size 设置缓存大小
#       inactive 超过此时间则被清理
#       use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;

location / {
    proxy_pass  http://tomcats;

    # 启用缓存,和keys_zone一致
    proxy_cache mycache;
    # 针对200和304状态码缓存时间为8小时
    proxy_cache_valid   200 304 8h;
}
相关推荐
苹果醋33 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰17 分钟前
[linux]docker基础
linux·运维·docker
Jason-河山1 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
雨雪飘零1 小时前
Windows系统使用OpenSSL生成自签名证书
nginx·证书·openssl
lihuhelihu1 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
哲讯智能科技1 小时前
SAP Business One市场价格解析
运维·sap·erp
山东布谷科技官方2 小时前
布谷直播源码部署服务器关于数据库配置的详细说明
运维·服务器·数据库·直播系统源码·直播源码·直播系统搭建·直播软件开发
One_Blanks2 小时前
渗透测试-Linux基础(1)
linux·运维·安全
yanwushu2 小时前
Xserver v1.4.2发布,支持自动重载 nginx 配置
mysql·nginx·php·个人开发·composer
爱吃喵的鲤鱼2 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++