程序员必备小知识系列--个人网站功能开发与性能优化经历(4)

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

自己搭建了一个基于SpringBoot+Spring Security+MyBatis+MySQL+Redis+Thymeleaf的博客网站。上线个人云服务器后,发现服务器访问慢。个人服务器是1核2G的,1M宽带,虽然服务器是低配的,但是可以通过优化代码,中间件等手段,来提升性能。我会讲解个人网站功能的开发与一些性能优化的经历。

这篇主要讲Nginx中间件优化

Nginx主要从负载均衡,限流,限制单个IP的并发数等方面来讲解

一、Nginx负载均衡

负载均衡,用白话讲,就是一个机器分身成几个机器,有一样的效果,帮你分担活。
以前的文章讲了负载均衡SpringBoot项目在Linux部署用Nginx实现负载均衡Https访问,这篇当作复习,大概讲解一下。

1、假如把java项目打包成3个,3个端口不一

2、nginx配置信息,主要配置ip+端口号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
java复制代码upstream my_blog { #upstream节点名称,my_blog给后面负载均衡使用
server 193.112.29.147:14341;# ip+端口号
server 193.112.29.147:14342;
server 193.112.29.147:14343;
}
server {
listen 443;# 新增443端口
server_name xuluowuhen.com www.xuluowuhen.com;# 域名
# 开启ssl
ssl on;
# 配置ssl证书(文件在相同目录下,也可以不同目录,路径要写绝对路径)
ssl_certificate 1_www.xuluowuhen.com_bundle.crt;
# 配置证书秘钥
ssl_certificate_key 2_www.xuluowuhen.com.key;
# ssl会话cache
ssl_session_cache shared:SSL:1m;
# ssl会话超时时间
ssl_session_timeout 5m;
# 配置加密套件,写法遵循 openssl 标准
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_ssl_server_name on;
proxy_pass http://my_blog; # 跟upstream节点名称节点对应
index index.html index.htm;
}
error_page 404 /404.html;

error_page 403 /403.html;
}

3、检验并修改好配置信息,启动Nginx

1
2
3
4
5
6
7
8
java复制代码进入配置文件目录
cd /usr/local/nginx/conf/
检测配置是否ok
../sbin/nginx -t
重新加载
../sbin/nginx -s reload
查看nginx运行状态
ps -A | grep nginx

总的思路是这些,具体可以看以前写的博客

二、限流,禁封IP

ip黑名单,如果发现某个ip持续不断的访问,甚至他的访问造成你的服务器压力很大,CPU持续增加,那么你可以拉近你的黑名单里。

1
2
java复制代码# 在http模块添加以下配置即可
deny 192.168.32.14

甚至可以限制用户访问的次数,并发数,等等,如果别人用Jmeter做压测,那么你的服务器很大程度扛不住。

具体配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
java复制代码#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
#以$binary_remote_addr 为key,限制平均每秒的请求为5个,
#1M能存储16000个状态,rete的值必须为整数,
#如果限制两秒钟一个请求,可以设置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=5r/s;
server {
# listen 443;
listen 441;
server_name xuluowuhen.com www.xuluowuhen.com;
# 开启ssl
ssl on;
# 配置ssl证书
ssl_certificate 1_www.xuluowuhen.com_bundle.crt;
# 配置证书秘钥
ssl_certificate_key 2_www.xuluowuhen.com.key;
# ssl会话cache
ssl_session_cache shared:SSL:1m;
# ssl会话超时时间
ssl_session_timeout 5m;
# 配置加密套件,写法遵循 openssl 标准
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_ssl_server_name on;
proxy_pass http://my_blog;
index index.html index.htm;

#限制每ip每秒不超过20个请求,漏桶数burst为5
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,
#第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#第1秒25个请求时,5个请求放到第2秒执行,
#设置nodelay,25个请求将在第1秒执行。

limit_req zone=allips burst=5 nodelay;
}
error_page 404 /404.html;

error_page 403 /403.html;
}

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%