一个没有技术只会增删改查的后端
Nginx实现JWT验证-基于OpenResty实现​

介绍

权限认证是接口开发中不可避免的问题,权限认证包括两个方面

1. 接口需要知道调用的用户是谁
2. 接口需要知道该用户是否有权限调用

第1个问题偏向于架构,第2个问题更偏向于业务,因此考虑在架构层解决第1个问题,以达到以下目的

1. 所有请求被保护的接口保证是合法的(已经认证过的用户)
2. 接口可以从请求头中获取当前用户信息
3. 每个请求都有uuid用于标识
sql语句的优化分析​

开门见山,问题所在

sql语句性能达不到你的要求,执行效率让你忍无可忍,一般会时下面几种情况。

  1. 网速不给力,不稳定。
  2. 服务器内存不够,或者SQL 被分配的内存不够。
  3. sql语句设计不合理
  4. 没有相应的索引,索引不合理
  5. 没有有效的索引视图
  6. 表数据过大没有有效的分区设计
  7. 数据库设计太2,存在大量的数据冗余
  8. 索引列上缺少相应的统计信息,或者统计信息过期
  9. ….

那么我们如何给找出来导致性能慢的的原因呢?

  1. 首先你要知道是否跟sql语句有关,确保不是机器开不开机,服务器硬件配置太差,没网你说p啊
  2. 接着你使用我上一篇文章中提到的2柯南sql性能检测工具–sql server profiler,分析出sql慢的相关语句,就是执行时间过长,占用系统资源,cpu过多的
  3. 然后是这篇文章要说的,sql优化方法跟技巧,避免一些不合理的sql语句,取暂优sql
  4. 再然后判断是否使用啦,合理的统计信息。sql server中可以自动统计表中的数据分布信息,定时根据数据情况,更新统计信息,是很有必要的
  5. 确认表中使用啦合理的索引,这个索引我前面博客中也有提过,不过那篇博客之后,还要进一步对索引写篇文章
  6. 数据太多的表,要分区,缩小查找范围
使用Kubespray部署Kubernetes集群​

主机配置

主机 系统 配置 IP
Ansible CentOS 7 1核1G 192.168.137.100
Mater、Node CentOS 7 2核4G 192.168.137.101
Node CentOS 7 2核2G 192.168.137.102

关闭防火墙

三台主机都需要操作

1
2
3
4
# 关闭防火墙
systemctl stop firewalld
# 禁止防火墙开机启动
systemctl disable firewalld
docker - 设置HTTP/HTTPS 代理​

编辑配置文件

  1. http代理
1
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
1
2
[Service]    
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
  1. https代理
Hyper-V 共享式网络链接 端口映射​

远程路由访问我配置了很久都不成功,经过多方搜索,下面的命令能实现端口映射

一、查询端口映射情况

1
netsh interface portproxy show v4tov4

查询这个IP所有的端口映射。

1
netsh interface portproxy show v4tov4|find "192.168.1.1" 
MySQL开启federated引擎实现数据库表映射​

开启federated引擎

查看启Federated引擎是否安装

1
show engines; 

可以看出服务器已经安装并启用了Federated引擎

将java应用(springboot jar)注册成Windows服务

将springboot 打包成jar

  1. 修改pom.xml设置<packaging>jar</packaging>

  2. 使用mvn命令打包程序mvn clean package

  3. 在项目目录target下找到jar文件

下载WinSW

  1. github开源地址

  2. 下载地址

  3. 下载WinSW.NET4.exesample-minimal.xml文件

修改WinSW配置文件

通过NTML代理访问Maven库

公司用web代理,NTLM验证的,这样在普通CMD下无法使用mvn命令访问网上的maven库,使用CNTLM工具解决。

下载CNTLM工具,安装,修改安装路径下的cntlm.ini,改成实际的ntlm proxy地址,CNTLM会起一个proxy service监听3128端口。

然后配置maven的代理,在maven目录下\conf/settings.xml。

1
2
3
4
5
6
7
<proxy>  
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<host>127.0.0.1</host>
<port>3128</port>
</proxy>

这个可以让cmd下运行mvn时候让mvn去找本地的cntlm代理,因为cntlm代理已经连通了实际的内网web代理,这时可以搜索到外网respository的jar包了。

nginx反向代理webSocket配置

最近有一个需求,就是需要使用 nginx 反向代理 websocket,经过查找一番资料,目前已经测试通过,本文只做一个记录。

看官方文档说 Nginx 在 1.3.13 以后的版本才支持 websocket 反向代理,所以要想使用支持 websocket 的功能,必须升级到 1.3.13 以后的版本。

配置起来也特别简单。配置参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name test.test.cn;


location / {
proxy_pass http://test2.test.cn:8080;

proxy_read_timeout 3600s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

}
}

简单解释一下:

nginx之proxy_pass指令完全拆解

一、proxy_pass的nginx官方指南

nginx中有两个模块都有proxy_pass指令。

ngx_http_proxy_module的proxy_pass:

1
2
3
4
5
语法: proxy_pass URL;
场景: location, if in location, limit_except
说明: 设置后端代理服务器的协议(protocol)和地址(address),以及location中可以匹配的一个可选的URI。协议可以是"http"或"https"。地址可以是一个域名或ip地址和端口,或者一个 unix-domain socket 路径。
详见官方文档: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
URI的匹配,本文第四部分重点讨论。

ngx_stream_proxy_module的proxy_pass: