下面介绍下X-frame-Options主要用处是用于防止点击劫持,点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。 HTTP响应头信息中的X-frame-Options,可以指示浏览器是否应该加载一个iframe中的页面。如果服务器响应头信息中没有X-frame-Options,则该网站存在ClickJacking攻击风险。网站可以通过设置X-frame-Options阻止站点内的页面被其他页面嵌入从而防止点击劫持。
X-frame-Options响应头。赋值有如下三种:
DENY:不能被嵌入到任何iframe或者frame中。SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中ALLOW-FROM uri:只能被嵌入到指定域名的框架中
从这里就可以看到,是因为Spring Security默认设置X-frame-Options响应头是 DENY,也就是不能被嵌入到任何iframe中,这也造成了我们无法正常显示eureka页面,所以我们需要在Spring Security的配置文件中设置关闭X-frame-Options即可,也就是加入下面这句
链接地址
算法学习数据结构可视化 (usfca.edu)
linux 设置远程和终端限制vim /etc/pam.d/sshd vim /etc/pam.d/system-auth auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 even_deny_root root_unlock_time=120nginx平滑升级
nginx平滑升级
一、下载最新版本的nginx包
进入nginx官网查看最新版本的nginx
wget http://nginx.org/download/nginx-1.21.4.tar.gz
二、解压编译
解压压缩包 tar -xzvf nginx-1.21.4.tar.gz
准备 cd nginx-1.21.4
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module
编译 make
三、替换nginx
执行完编译之后,不执行安装操作。直接替换原文件中的nginx启动文件。
安全起见,先将原来的启动文件备份。 mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
复制编译后的启动文件到目录sbin下。 cp ./objs/nginx /usr/local/nginx/sbin/
四、升级
首先,测试一下复制过来的文件的生效情况。 /usr/local/nginx/sbin/nginx -t
如果看到 successful 则代表没问题,可以重启nginx服务进行平滑的升级了。
如果出现 nginx: [emerg] the "ssl" parameter requires ngx_http_v2_module in /usr/local/nginx/conf/nginx.conf :32 说明是在准备工作是缺少了依赖配置,应重新从./configure开始。要在./configure后加上--with-http_v2_module的依赖。相似错误同理
如果出现XX no such file。找不到相关文件,则要去nginx.conf重新配置路径。
五、验证
升级完成之后可以通过 /usr/local/nginx/sbin/nginx -v 来查看nginx的版本是否已成功升级
es的too_many_buckets_exception
https://stackoverflow.com/questions/58234784/too-many-buckets-exception-in-elasticsearch
遇到 ElasticsearchStatusException[Elasticsearch exception [type=search_phase_execution_exception, reason=]];嵌套:ElasticsearchException[Elasticsearch 异常 [type=too_many_buckets_exception,原因=尝试创建太多存储桶。必须小于或等于: [20000] 但为 [20001]。可以通过更改 [search.max_buckets] 集群级别设置来设置此限制
通过更改更改 [search.max_buckets] 集群级别设置来设置此限制
PUT /_cluster/settings { "persistent" : { "search.max_buckets":20000 } }
如果您使用的是 ES 版本 7.x.x,则可以向查询中添加子句,以限制将数据划分到的存储桶数。这主要发生在您尝试聚合的数据具有高度随机性时。terminate_after
如果数据包含文本,则最好在字段上聚合(假设您使用的是默认设置)。.keyword
POST your_index/_search
{
"from": 0,
"query": {
"match_all": {}
},
"size": 0,
"sort": [
{
"your_target_field": {
"order": "desc"
}
}
],
"terminate_after": 10000,
"version": true,
"aggs": {
"title": {
"terms": {
"field": "your_target_field.keyword",
"size": 10000
}
}
}
}
@Validated和@Valid
1.分组
@Validated:提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制。
例如:
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
@documented
@Constraint(validatedBy = { })
public @interface NotNull {
String message() default "{javax.validation.constraints.NotNull.message}";
Class>[] groups() default { };
Class extends Payload>[] payload() default { };
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@documented
@interface List {
NotNull[] value();
}
}
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
两者是否能用于成员属性(字段)上直接影响能否提供嵌套验证的功能。
2.位置@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
嵌套验证就是类嵌套类的验证,比如我要在集合上加一个@Notnull的注解,要求该集合中的每一个对象都被验证,如果只用@Validated与@Valid是不会验证的。我们要用@Validated配合@Valid来进行验证。
@Valid就是在方法入参中加入@Validated 在成员属性上加 @Valid总结
@Validated:用在方法入参上无法单独提供嵌套验证功能。不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。
@Valid:用在方法入参上无法单独提供嵌套验证功能。能够用在成员属性(字段)上,提示验证框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。
nginx 配置https 第一步:nginx 的 ssl 模块安装
查看 nginx 是否安装 http_ssl_module 模块。
/usr/local/nginx/sbin/nginx -V /home/bin/nginx/nginx -V 本次安装为 /home/bin/nginx路径
出现:
nginx version: nginx/1.14.0 built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4) built with OpenSSL 1.0.2p 14 Aug 2018 TLS SNI support enabled configure arguments: --sbin-path=/home/bin/nginx/nginx --conf-path=/home/bin/nginx/nginx.conf --pid-path=/home/bin/nginx/nginx.pid --with-http_ssl_module --with-pcre=/home/bin/pcre-8.42 --with-zlib=/home/bin/zlib-1.2.11 --with-openssl=/home/bin/openssl-1.0.2p --with-http_gzip_static_module
如果出现 (configure arguments: --with-http_ssl_module), 则已安装。
一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录,我的是在(/usr/local/nginx-1.14.0),进入目录后,输入
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make #切记不要执行make install,否则会重新安装nginx
上述操作执行完成以后,你的目录下会出现objs文件夹,文件夹内存在nginx文件
接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务。
./nginx -s stop #停止nginx服务 #替换之前的nginx cp /usr/local/nginx-1.14.0 /usr/local/nginx/sbin
成功之后,进入到nginx安装目录下,查看ssl时候成功
#注意这里是大写的V,小写的只显示版本号 ./nginx -V #可以看到这里出现了configure arguments: --with-http_ssl_module 证明已经安装成功第二步:配置ssl证书
解压缩下载好的证书(证书一般是pem文件和key文件,这里名字可以随便改)
将下载好的证书上上传到服务器,我将证书放在了root目录下的card文件夹。
#在root目录下创建card文件夹 /usr/local/nginx-1.14.0 mkdir card第三步:进行nginx.conf配置
进入nginx.conf文件下
cd /usr/locla/nginx/conf #修改nginx.conf文件 vim nginx.conf
配置 https server。
注释掉之前的 http server 配置,新增 https server:
然后进行配置,输入:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
listen 443;
# 域名,多个以空格分开
server_name xxx.com;
ssl on;
#ssl证书的pem文件路径
ssl_certificate /root/card/huiblog.top.pem;
#ssl证书的key文件路径
ssl_certificate_key /root/card/huiblog.top.key;
location / {
proxy_pass http://公网地址:项目端口号;
}
}
server {
listen 80;
server_name xxx.com;
#将请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}
}
第四步:重启nginx注意:这里需要在安全组中开放443端口。
ok,如果上述步骤都完成了,没有问题,接下来只需要重启nginx服务即可。
进入sbin目录下,输入
./nginx -s reload ./nginx -s stop ./nginx



