nginx在linux下的使用以及SpringSession

nginx优势(反向代理、负载均衡)

  • 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,能够支持高达 50,000 个并发连接数的响应。
  • 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率很优秀。
  • 作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。
  • Nginx(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以安装非常的简单,配置文件 非常简洁做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。

nginx的安装

  • 联网安装nginx相关的依赖
yum -y install zlib zlib-devel openssl openssl-devel 
yum -y install patch
  • 解压nginx压缩包
tar zxvf nginx-1.10.3.tar.gz
  • 配置nginx编译环境
./configure --prefix=/usr/local/nginx  --pid-path=/usr/local/nginx/nginx.pid --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-stream  --http-client-body-temp-path=/usr/local/nginx/tmp/client/ --http-proxy-temp-path=/usr/local/nginx/tmp/proxy/ 


<!--
配置说明
1. /configure : 配置nginx的编译环境
2. –pid-path : nginx的进程文件存放目录
3. --error-log-path : 错误日志存放目录
4. --http-log-path : 请求日志存放目录
5. module : Nginx中的功能,基本上都是以module的形式存在
-->
  • 编译安装
	- 在nginx目录下(/usr/local/nginx/),编译,执行 make
	- 再执行 make install
  • 验证nginx是否安装成功(出现版本号即安装成功)
/usr/local/nginx/sbin/nginx -V
  • 配置nginx.conf(服务器集群)
    • 不要忘记提前把域名和服务器IP绑定在一起。
vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

  • 校验nginx配置文件
/usr/local/nginx/sbin/nginx -t
  • 应该会报错缺少文件夹,创建文件夹
mkdir -p /usr/local/nginx/tmp/client
  • 校验成功,启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  • 如果无法访问,80端口加入防火墙白名单,重启
<!--80端口(http端口)加入防火墙白名单:-->
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload

<!--重启nginx-->
/usr/local/nginx/sbin/nginx -s reload

nginx的访问分配策略

  • 默认是轮询
    在这里插入图片描述

流量限制

  • 为防止用户恶意访问,可以在nginx设置限流,防止发生雪崩效应。
根据ip控制速率
<!--在server {外 http模块加上如下内容,为方便测试,每秒处理1个请求-->
limit_req_zone $binary_remote_addr zone=javasmlimit:10m rate=1r/s;

<!--limit_req_zone 只能配置在 http 范围内;
$binary_remote_addr代表客户端ip
javasmlimit是自定义变量名	
rate 请求频率,每秒允许多少请求;rate=3r/s; 每秒只处理3次请求,超过的请求拒绝处理。
10m缓冲区大小,1M能存储16000 IP地址,10M可以存储16W IP地址访问信息-->

<!--在location / {内 location模块加上如下内容,表示当前请求会根据javasmlimit规则来限流-->
limit_req zone=javasmlimit burst=3 nodelay;

<!--#nodelay 不延迟处理
#burst 是配置超额处理,可简单理解为队列机制
# 上面配置同一个 IP 每秒只能发送一次请求(1r/s),这里配置了缓存3个请求,其它任务请求则失败(503错误)-->

在这里插入图片描述

控制并发连接数
  • http模块添加
limit_conn_zone $binary_remote_addr zone=perip:10m;

limit_conn_zone $server_name zone=perserver:10m;
  • location模块添加
limit_conn perip 10;#单个客户端ip与服务器的连接数

limit_conn perserver 100; #限制与服务器的总连接数

# 限制传输速度(如果有N个并发连接,则是 N * limit_rate)
limit_rate 1024k;

流量限制不会提高服务器性能,但是能让服务器更加健壮。

静态文件服务器

  • 修改nginx.conf
第一行改为:user  root;
  • 加入新的location

    • 提前创建好文件夹,在文件夹中传入静态文件(css、js、jpg等)mkdir -p /home/data
  • 两种配置方式

    • root配置(了解)
    • alias配置(推荐)
    location /static/ {
          alias   /home/data/;
    }
    
    • alias是指定目录的虚拟路径,location指定的名称是代替文件目录的访问路径
      上面例子中,浏览器中输入static可以代替/home/data路径

跨域配置

允许全局的跨域
<!--在配置文件server模块内,加入如下配置-->
# 指定允许跨域的方法,*代表所有
add_header Access-Control-Allow-Methods *;
# 预检命令的缓存,如果不缓存每次会发送两次请求
add_header Access-Control-Max-Age 3600;
# 带cookie请求需要加上这个字段,并设置为true
add_header Access-Control-Allow-Credentials true;
# 表示允许这个域跨域调用(客户端发送请求的域名和端口) 
# $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号
add_header Access-Control-Allow-Origin $http_origin;
# 表示请求头的字段 动态获取
add_header Access-Control-Allow-Headers 
$http_access_control_request_headers;
# OPTIONS预检命令,预检命令通过时才发送请求
# 检查请求的类型是不是预检命令
if ($request_method = OPTIONS){
  return 200;
}
允许指定路径跨域
<!--在location模块内 加入以上配置-->
在代码中加入跨域配置

SpringSession

  • 分布式系统中,如何解决session共享问题?

  • 一个浏览器在访问多个web服务器时,多个服务器之间的session对象需要共享数据。

  • 使用SpringSession解决session共享问题。

  • SpringSession介绍:

    • SpringSession 是Spring家族中的一个子项目,Spring Session提供了用于管理用户会话信息的API和实现。
    • 它把servlet容器实现的httpSession替换为spring-session,专注于解决 session管理问题,Session信息存储在Redis中,可简单快速且无缝的集成到我们的应用中;

SpringBoot+SpringSession+Redis示例

  • 添加依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-data-redis</artifactId>
</dependency>
  • 设置配置文件
spring:
  redis:
    host: 127.0.0.1
    password: root
    port: 6379
    timeout: 3000
  session:
	store-type: redis
  • 发现此时已经可以达到Session共享。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值