Nginx的跨域设置
除了在springboot项目中处理跨域,Nginx中也可以处理跨域,具体配置如下:
server{
listen 80;
server_name XXX;
#允许跨域请求的域,*代表所有
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' *;
location / {
root /home/food;
index index.html;
}
}
Nginx配置资源防盗链
可以防止其他站点访问本站点的资源
*.xxx.com就是自己配置的域名
server{
listen 80;
server_name XXX;
#允许跨域请求的域,*代表所有
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' *;
#对源站点验证
valid_referers *.xxx.com;
#非法引入会进入下方判断
if ($invalid_referer) {
return 404;
}
location / {
root /home/food;
index index.html;
}
}
四层、七层负载均衡
四层:
F5硬负载均衡(贵)
LVS四层负载均衡
Haproxy四层负载均衡
Nginx四层负载均衡
七层:针对Http、Https(Web服务)的负载均衡
Nginx七层负载均衡
Haproxy七层负载均衡
apache七层负载均衡
四层主要是转发(TCP,UDP),七层可以处理请求,比如Nginx可以处理响应中的js,css这些东西。
DNS地域负载均衡
这个会根据不同的地域,请求不同的地域的服务器。
比如人在北京会请求北京的服务器,人在浙江请求浙江的服务器。
upstream搭建集群
yyy 就是集群的一个名词,proxy_pass 表示的有请求进来 要去匹配的这个集群(规则)
upstream yyy {
server 192.168.3.32:8080;
server 192.168.3.33:8080;
server 192.168.3.34:8080;
}
server {
listrn 80;
server_name www.xxx.com;
location / {
proxy_pass http://yyy;
}
}
Nginx负载均衡策略
轮询(默认)
集群中有3台服务器,每次刷新都会轮询到另外一台上。
权重轮询
weight默认值为1,值越大,权重越大。
upstream yyy {
server 192.168.3.32:8080 weight=1;
server 192.168.3.33:8080 weight=2;
server 192.168.3.34:8080 weight=3;
}
upstream指令参数
max_conns:一台服务器最大的连接数,默认值为0,也就是不做任何限制
如下配置也就是,最大9个用户同时访问,其他的可能会访问不到,只能等前面的释放了之后才能正常访问。
upstream yyy {
server 192.168.3.32:8080 max-conns=2;
server 192.168.3.33:8080 max-conns=3;
server 192.168.3.34:8080 max-conns=4;
}
slow_start
缓慢启动,服务器慢慢加入集群
slow_start只适用于集群,否则失效
商业版,需要付费
down
添加了down,那么这台服务器就不能被访问到
backup
添加了backup之后,如果有服务器挂掉了,这台才会启用,才会被用户访问到
max_fails
最大的失败次数,达到了这个次数,那么这台服务器就不能被访问了
max_fails只适用于集群,否则失效
fail_timeout
失败的时间段
fail_timeout只适用于集群,否则失效
如果max_fails=3,fail_timeout=15,那么就是说在15秒以内某个请求到达了这台服务器,失败了3次,那么就会认为这台服务器宕机了,随后还会继续等待15秒,在这15秒之内就不会有请求发送到这台宕机的服务器上。等15秒之后又新的请求过来就会尝试到这台宕机的服务器上,循环上面的操作。
keepalive
可以提高吞吐率,也就是把之前请求完毕就断开连接变成了一个长连接。
在location中需要设置http的版本,默认是1.0,是不存在长连接的
Connection ""意思就是清楚connection header里的一些信息
upstream yyy {
server 192.168.3.32:8080;
server 192.168.3.33:8080;
server 192.168.3.34:8080;
keepalive 32;
}
server {
listrn 80;
server_name www.xxx.com;
location / {
proxy_pass http://yyy;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
负载均衡之ip_hash
算法:hash(ip) % node_counts = index
node_counts就是服务器节点数,index就是访问下标为index的那台服务器
只需要在upstream里添加ip_hash;就会使用这个算法去请求。
upstream yyy {
ip_hash;
server 192.168.3.32:8080;
server 192.168.3.33:8080;
server 192.168.3.34:8080;
}
他的hash算法是根据ip的前三段.如192.168.3.32,他知根据192.168.3根据计算
如果需要移除某一台服务器,不能直接在配置中删除,而是在那台需要删除的服务器后面加上down,如果直接删除会影响hash算法,从而影响一些缓存等。
一致性hash算法
在一个0-((2^32)-1)的闭合空间中
**采用顺时针就近原则:**让用户访问顺时针方向上最近的服务器节点
当服务器节点删除时,那台宕机服务器上的用户数据就会被迁移到顺时针就近的那台服务器上,用户也就到那台服务器上访问
当服务器增加时候,用户也是会就近去新增加的服务器上,原则上要保证是就近顺时针上的服务器节点。
url_hash
hash(url) % node_counts = index
根据访问的url Hash值来觉得访问那台服务器
upstream yyy {
hash $request_uri;
server 192.168.3.32:8080;
server 192.168.3.33:8080;
server 192.168.3.34:8080;
}
least_conn
根据最少的连接数去进行请求
upstream yyy {
hash $request_uri;
least_conn;
server 192.168.3.32:8080;
server 192.168.3.33:8080;
server 192.168.3.34:8080;
}
控制缓存
expires 10s;表示10秒之后过期
expires @22h30m;表示晚上10:30过期
expires -1h;距离现在1个小时之前过期
expires epoch;缓存不生效
expires off;使用浏览器默认
expires max;永不过期(315360000)
server {
listrn 80;
server_name www.xxx.com;
location /static {
alias /home;
#expires 10s;
#expires @22h30m;
#expires -1h;
#expires epoch;
#expires off;
expires max;
}
}
反向代理缓存
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;
server {
listrn 80;
server_name www.xxx.com;
proxy_cache mycahce; #开启并使用缓存
proxy_cache_valid 200 304 8h; #针对状态码200和304状态码的缓存设置过期时间
location /static {
alias /home;
}
}