Nginx升级篇

一、Nginx的跨域问题

所谓跨域请求,就是从当前域名访问另外一个域名的操作

CORS跨域资源共享

允许浏览器向跨Origin的服务器发起js请求获取响应

常用的解决跨域请求的方式:

SpringBoot Cors(具体代码如下)

package com.imooc.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {

    public CorsConfig() {

    }

    @Bean
    public CorsFilter corsFilter() {
        // 1.添加cors配置信息
        CorsConfiguration configuration = new CorsConfiguration();
        // 添加前端请求的路径
        configuration.addAllowedOrigin("http://localhost:8080");
        // 设置是否发送cookie信息
        configuration.setAllowCredentials(true);
        // 设置允许请求的方式
        configuration.addAllowedMethod("*");
        // 设置允许的header
        configuration.addAllowedHeader("*");

        // 2.为URL添加映射路径
        UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
        corsSource.registerCorsConfiguration("/**", configuration);

        // 返回重新定义好的urlBasedCorsConfigurationSource
        return new CorsFilter(corsSource);
    }
}

Nginx(具体代码如下)

server {
        listen       8080;
        server_name  localhost;
        
        # 允许跨域请求的域,*代表所有
        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   html;
            index  index.html index.htm;
        }
    }

二、Nginx防盗链配置支持

仅对代码中的imooc.com的域名进来的请求进行展示,其余进来的请求均为404

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

三、Nginx集群负载均衡解析

单节点

解释说明:一个人搬砖

集群

解释说明:老板雇佣多个人同时搬砖,优点在于系统稳定性及高效性

Nginx集群负载均衡(upstream)


四、网络模型

网络模型分为7层,也就是当用户发起请求到服务器接收,会经历七道工序

层级名称说明
第七层应用层与用户行为交互
第六层表示层定义数据格式以及数据加密
第五层会话层创建、管理以及销毁会话
第四层传输层创建、管理请求到响应端的连接
第三层网络层请求端的IP地址
第二层数据链路层提供介质访问和链路管理
第一层物理层传输介质、物理媒介

五、使用Nginx构建tomcat集群

#配置集群
upstream tomcats {
    server ip1:port1;
    server ip2:port2;
    server ip3:port3;
}

server {
    listen 80;
    server_name www.tomcats.com;

    location / {
        proxy_pass http://tomcats
    }
}

六、负载均衡请求分配策略

1.负载均衡-轮询

说明:每台服务器所接收的请求数量几乎是一样的,是负载均衡默认的一种策略

2.负载均衡-加权轮询

说明:上述可以理解为服务器,服务器性能越好,分配的请求就多一点。能者多劳嘛,哈哈哈

代码示例:

#配置集群
upstream tomcats {
    server ip1:port1 weight 1;
    server ip2:port2 weight 2;
    server ip3:port3 weight 5;
}

说明:weight代表权重大小,数值越大,服务器接收的请求就越多

3.负载均衡-ip-hash

hash算法图片示例

说明:ip的数值%服务器的节点数量 = index,index为几就落到哪台服务器上

代码配置

#配置集群
upstream tomcats {
    ip_hash;
    server ip1:port1;
    server ip2:port2;
    server ip3:port3;
}

注意事项:

使用ip_hash算法的时候,不能把后台的服务器直接移除,只能标记为down;

使用ip_hash的时候,如果在过程中,某些服务器宕机,则hash则进行重新计算,对应访问的服务器则重新指定

一致性哈希算法:

说明:服务器节点和用户ip都落在上述环形上,如果有服务器减少,则只有部分用户会跳过减少的服务器,顺时针落在可执行的服务器上,如果增加服务器,增同理,该算法的好处就在于,服务器的节点和用户的节点都不需要重新计算,节省了部分CPU资源

4.负载均衡-URL_hash

其实道理和ip_hash是一样的,不一样的地方就是一个是用ip求hash值,一个是用url求hash值


七、upstream指令参数

指令名称指令说明代码示例
max_conns限制最大同时并发的连接数,可以起到限流的作用#配置集群
upstream tomcats {
    server ip1:port1 max_conns=2;
    server ip2:port2 max_conns=2;
    server ip3:port3 max_conns=2;
}
slow_start缓慢启动,不能使用在单个服务器上,只能使用在集群中,就是在启动过程中权重从0进行缓慢增加#配置集群
upstream tomcats {
    server ip1:port1 slow_start=60s;
    server ip2:port2 slow_start=60s;
    server ip3:port3 slow_start=60s;
}
down表示服务器的状态,表示服务器不可用的状态#配置集群
upstream tomcats {
    server ip1:port1 down;
    server ip2:port2 slow_start=60s;
    server ip3:port3 slow_start=60s;
}
backup可以理解为备胎,就是别的服务器宕掉以后,才会访问到这个服务器,没想到啥时候都得有备胎啊#配置集群
upstream tomcats {
    server ip1:port1 down;
    server ip2:port2 backup;
    server ip3:port3 slow_start=60s;
}
max_fails最大的失败次数,这个命令的作用就是,一台服务器最大的失败次数,如果达到最大的失败的次数以后,等待15s再发给这台服务器请求,对了,需要和fail_timeout进行配合哦。哈哈哈,给你机会你中用啊upstream tomcats {
    server ip1:port1 down;
    server ip2:port2 backup;
    server ip3:port3 max_fails=2 fail_timeout=10s;
}
fail_timeout和max_fails进行配合使用,就是设置时间的,就是如果达到最大失败次数以后,需要等待的那个时间upstream tomcats {
    server ip1:port1 down;
    server ip2:port2 backup;
    server ip3:port3 max_fails=2 fail_timeout=10s;
}
keepalive提高吞吐量

upstream tomcats {
        keepalive 32;// 设置长连接处理的数量
}

server {
        listen       80;
        server_name  www.tomcats.com;

        location / {
            proxy_pass  http://tomcats;
            proxy_http_version 1.1;//设置长连接http版本我1.1
            proxy_set_header Connection "";//清除Connection header信息
        }
    }


八、缓存

expires 命令控制一下浏览器的缓存,主要是针对一些静态资源 
location / { 
expires 10s; # 允许浏览器缓存该资源10s 
expires @22h30m; # @指定时间点 后过期 
expires -1h; # 在之前1h就已经过期了 
expires epoch; # 不使用缓存了 
expires off; # 默认关闭 
expires max; # 最大时间,永不过期 
}  
Nginx缓存:上游服务器静态资源缓存到nginx,比如有一台tomcat静态资源服务器,在Nginx中设置了缓存之后,会把从tomcat静态资源服务器请求到的静态资源缓存到Nginx,并且可以设置静态资源的缓存时间

upstream webs {

        server ip:port;

}

# proxy_cache_path 设置缓存目录

# keys_zone 设置共享内存,dev_cache是共享内存的名字,10m是共享内存的大小

# max_size 设置缓存的最大大小

# inactive 设置文件的过期时间,超过此时间就会被清理

# use_temp_path 设置是否使用临时目录,使用会影响Nginx性能

proxy_cache_path /usr/local/nginx/cache keys_zone=dev_cache:10m max_size=1g inactive=8h use_temp_path=off;

server {

        listen       88;

        server_name  www.tomcats.com;

        location / {

            proxy_pass http://webs;

            # 启用缓存,名字跟keys_zone设置的名字一致

            proxy_cache dev_cache;

            # 针对200和304状态码的资源进去缓存,缓存时间为8小时

            proxy_cache_valid 200 304 8h;

        }

}


  • 37
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值