文章目录
nginx优势(反向代理、负载均衡)nginx的安装nginx的访问分配策略流量限制根据ip控制速率控制并发连接数
静态文件服务器跨域配置允许全局的跨域允许指定路径跨域在代码中加入跨域配置
SpringSessionSpringBoot+SpringSession+Redis示例
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/
编译安装
- 在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端口加入防火墙白名单,重启
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
/usr/local/nginx/sbin/nginx -s reload
nginx的访问分配策略
默认是轮询
流量限制
为防止用户恶意访问,可以在nginx设置限流,防止发生雪崩效应。
根据ip控制速率
limit_req_zone $binary_remote_addr zone=javasmlimit:10m rate=1r/s;
limit_req zone=javasmlimit burst=3 nodelay;
控制并发连接数
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路径
跨域配置
允许全局的跨域
# 指定允许跨域的方法,*代表所有
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;
}
允许指定路径跨域
在代码中加入跨域配置
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共享。