Category: 转载

9 Posts

Unexpected AOP exception; nested exception is java.lang.IllegalStateException:
很奇怪的一个bug,在本机上运行没问题,丢到服务器中就会报这个错。 原因 spring-aop版本与 aspectjweaver 包版本冲突 解决办法 我的maven项目的spring-aop版本是5.1.9,其他的spring版本是5.2.1,aspectjweaver 版本是1.8.3,将spring-aop的版本改成5.2.1,运行正常。 由于我的项目中并没有用到spring-aop包,用的是aspectjweaver ,直接将spring-aop删掉,运行正常 原文链接:https://blog.csdn.net/qq_40301107/article/details/103290420
[转]nginx 开启websocket
1、编辑nginx.conf,在http区域内添加下面配置: map $http_upgrade $connection_upgrade { default upgrade; '' close; } map指令的作用: 该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量$http_upgrade的值创建新的变量$connection_upgrade, 创建的规则就是{}里面的东西。其中的规则没有做匹配,因此使用默认的,即 $connection_upgrade 的值会一直是 upgrade。然后如果 $http_upgrade为空字符串的话, 那值会是 close。 2、虚拟主机的配置文件,在location匹配配置中添加如下内容: proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; 示例如下: upstream socket.kevin.com { hash $remote_addr consistent; server 10.0.12.108:9000; server 10.0.12.109:9000; } location / { proxy_pass http://socket.kevin.com/; proxy_set_header Host $host:$server_port; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }   3、Nginx代理webSocket经常中断的解决方法(也就是如何保持长连接) 现象描述:用nginx反代代理某个业务,发现平均1分钟左右,就会出现webSocket连接中断,然后查看了一下,是nginx出现的问题。 产生原因:nginx等待第一次通讯和第二次通讯的时间差,超过了它设定的最大等待时间,简单来说就是超时! 解决方法1 其实只要配置nginx.conf的对应localhost里面的这几个参数就好 proxy_connect_timeout; proxy_read_timeout; proxy_send_timeout; 解决方法2 发心跳包,原理就是在有效地再读时间内进行通讯,重新刷新再读时间 配置示例: http { server { location / { root html; index index.html index.htm; proxy_pass http://webscoket; proxy_http_version 1.1; proxy_connect_timeout 4s; #配置点1 proxy_read_timeout 60s; #配置点2,如果没效,可以考虑这个时间配置长一点 proxy_send_timeout 12s; #配置点3 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } } } 关于上面配置2的解释 这个是服务器对你等待最大的时间,也就是说当你webSocket使用nginx转发的时候,用上面的配置2来说,如果60秒内没有通讯,依然是会断开的,所以,你可以按照你的需求来设定。比如说,我设置了10分钟,那么如果我10分钟内有通讯,或者10分钟内有做心跳的话,是可以保持连接不中断的,详细看个人需求 WebSocket与Socket的关系 - Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。 - WebSocket就像HTTP一样,则是一个典型的应用层协议。 总的来说:Socket是传输控制层接口,WebSocket是应用层协议。   本文转载至:https://blog.csdn.net/u011411069/article/details/98475433
thumbnail
一键DD脚本(萌咖) CentOS/Debian/Ubuntu
  一键DD Linux系统的用途 基本所有的VPS服务器商家,都会提供免费的Linux系统供安装,比如CentOS、Debian、Ubuntu等。那为什么还要使用一键DD脚本重装/更换系统呢? 商家提供的系统版本有限,可能没有自己需要的版本。 商家的系统安装有自己不想要的服务,比如国内的阿里云盾(安骑士)。 商家的系统无法安装特定软件,比如很挑内核的锐速。 以上几种情况,一键DD脚本就可以为服务器更换一个纯净的系统,帮你解决问题。 ...
thumbnail
centos7基于luks对磁盘进行加密
~ LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果口令失密,我们可以迅速改变口令而无需重新加密真个硬盘。通过提供一个标准的磁盘上的格式,它不仅方便之间分布的兼容性,而且还提供了多个用户密码的安全管理。必须首先对加密的卷进行解密,才能挂载其中的文件系统。 流程 如果待加密的分区已经有数据了,那么请先备份。 如果已经挂载了,也需要先卸载。 格式化加密分区 分区映射 创建文件系统 挂载   工具:cryptsetup(如果没有安装执行 yum install -y cryptsetup) [[email protected] ~]# cryptsetup --help cryptsetup 1.7.4 用法: cryptsetup [选项…] <动作> <动作特定参数> --version 打印软件包版本 -v, --verbose 显示更详细的错误信息 --debug 显示调试信息 -c, --cipher=STRING 用于加密磁盘的密文(参见 /proc/crypto) -h, --hash=STRING 用于从密码创建加密密钥的哈希值 -y, --verify-passphrase 两次询问密码以进行验证 -d, --key-file=STRING 从文件读取密钥。 --master-key-file=STRING 从文件读取卷(主)密钥。 --dump-master-key 转储卷(主)密钥而不是键槽信息。 -s, --key-size=位 加密密钥大小 -l, --keyfile-size=字节 限制从密钥文件读取 --keyfile-offset=字节 要从密钥文件跳过的字节数 --new-keyfile-size=字节 限制从新增密钥文件的读取 --new-keyfile-offset=字节 要从新增密钥文件跳过的字节数 -S, --key-slot=INT 新密钥的槽号(默认为第一个可用的) -b, --size=扇区 设备大小 -o, --offset=扇区 后端设备的起始偏移量 -p, --skip=扇区 从开头要跳过的加密数据扇区数量 -r, --readonly 创建只读映射 -i, --iter-time=毫秒 LUKS 默认 PBKDF2 迭代时间(毫秒) -q, --batch-mode 不要请求确认 -t, --timeout=秒 交互式密码提示符超时长度(秒) -T, --tries=INT 输入密码的最大重试频率 --align-payload=扇区 于 <n> 个扇区边界处对其载荷数据 - 供 luks 格式用 --header-backup-file=STRING 带有 LUKS 数据头和密钥槽备份的文件。 --use-random 使用 /dev/random 生成卷密钥。 --use-urandom 使用 /dev/urandom 生成卷密钥。 --shared 与另一个不重合的加密段共享设备。 --uuid=STRING 设备使用的 UUID 已占用。 --allow-discards 允许设备的 discard(或称 TRIM)请求。 --header=STRING 带有分离 LUKS 数据头的设备或文件。 --test-passphrase 不要激活设备,仅检查密码。 --tcrypt-hidden 使用隐藏数据头(隐藏 TCRYPT 设备) --tcrypt-system 设备为系统 TCRYPT 驱动器(带有引导器)。 --tcrypt-backup 使用备份(次级)TCRYPT 标头。 --veracrypt 同时扫描 VeraCrypt 兼容的设备。 -M, --type=STRING 设备元数据类型:luks, 纯粹 (plain), loopaes, tcrypt. --force-password 禁用密码质量检查 (如果已启用)。 --perf-same_cpu_crypt 使用 dm-crypt same_cpu_crypt 性能兼容性选项。 --perf-submit_from_crypt_cpus 使用 dm-crypt submit_from_crypt_cpus 性能兼容性选项。 帮助选项: -?, --help 显示此帮助 --usage 显示简短用法 <动作> 为其中之一: open…
[转]真正的inotify+rsync实时同步 彻底告别同步慢
我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题。但当web文件越来越多(百万级数量html,jpg等小 文件),同步就越来越慢,根本做不到实时,按照网上的调优方法都尝试过,问题根本没有解决。经过我一翻细致研究,终于把慢的核心问题研究明白,先总结一句 inotifywait响应不会有延迟,rsync也很快。大家同样有慢的烦恼,那是因为网上的inotify+rsync的教程都是坑。下面我们来分 析。 inotifywait 单独分析 /usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib /data/ 执行上面命令,是让inotifywait监听/data/目录,当监听到有发生modify,create,delete,attrib等事件发生时,按%Xe %w%f的格式输出。 在/data/目录touch几个文件 touch /data/{1..5} 观看inotify输出 ATTRIB /data/1 -- 表示发生了ATTRIB事件 路径为/data/1 ATTRIB /data/2 ATTRIB /data/3 ATTRIB /data/4 ATTRIB /data/5   知道上面的输出效果之后 我们应该想得到,可以用rsync获取inotifywait监控到的文件列表来做指定的文件同步,而不是每次都由rsync做全目录扫描来判断文件是否存在差异。 网上的inotify+rsync分析 我们来看网上的教程,我加了注释。(网上所有的教程基本都一模一样,尽管写法不一样,致命点都是一样的) #!/bin/bash /usr/bin/inotifywait -mrq --format '%w%f'-e create,close_write,delete /backup |while read file #把发生更改的文件列表都接收到file 然后循环,但有什么鬼用呢?下面的命令都没有引用这个$file 下面做的是全量rsync do cd /backup && rsync -az --delete /backup/ [email protected]::backup/--password-file=/etc/rsync.password done   #注意看 这里的rsync 每次都是全量的同步(这就坑爹了),而且 file列表是循环形式触发rsync ,等于有10个文件发生更改,就触发10次rsync全量同步(简直就是噩梦),那还不如直接写个死循环的rsync全量同步得了。 #有很多人会说 日志输出那里明明只有差异文件的同步记录。其实这是rsync的功能,他本来就只会输出有差异需要同步的文件信息。不信你直接拿这句rsync来跑试试。 #这种在需要同步的源目录文件量很大的情况下,简直是不堪重负。不仅耗CPU还耗时,根本不可以做到实时同步。 改良方法 要做到实时,就必须要减少rsync对目录的递归扫描判断,尽可能的做到只同步inotify监控到已发生更改的文件。结合rsync的特性,所以这里要分开判断来实现一个目录的增删改查对应的操作。 脚本如下 #!/bin/bash src=/data/ # 需要同步的源路径 des=data # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。 rsync_passwd_file=/etc/rsyncd.passwd # rsync验证的密码文件 ip1=192.168.0.18 # 目标服务器1 ip2=192.168.0.19 # 目标服务器2 user=root # rsync --daemon定义的验证用户名 cd ${src} # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果 /usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file # 把监控到有发生更改的"文件路径列表"循环 do INO_EVENT=$(echo $file | awk '{print $1}') # 把inotify输出切割 把事件类型部分赋值给INO_EVENT INO_FILE=$(echo $file | awk '{print $2}') # 把inotify输出切割 把文件路径部分赋值给INO_FILE echo "-------------------------------$(date)------------------------------------" echo $file #增加、修改、写入完成、移动进事件 #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。 if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] # 判断事件类型 then echo 'CREATE or MODIFY or CLOSE_WRITE…
thumbnail
bbrplus(bbr修正版)一键安装与使用
该大佬整合了四合一脚本,支持bbr 原版/魔改/plus+锐速,可以使用最新的这个版本。 https://blog.curlc.com/archives/471.html 在 https://blog.csdn.net/dog250/article/details/80629551 中,dog250大神提到了bbr初版的两个问题:bbr在高丢包率下易失速以及bbr收敛慢的问题,提到了他个人与bbr作者对这两个问题的一些修正,并在文末给出了修正后的完整代码。 在这里我只是将它编译出来(不是我写的),做了一键脚本,我叫它bbr修正版,或者bbrplus。 它基于原版bbr,但修正了bbr存在的上述问题,尝试使其更好,减少排队和丢包。 由于编译修正后的模块需要4.14版的内核, 以及需要修改内核的部分源码,所以需要重新编译整个内核。 这里提供一个编译好并内置bbrplus的适用于centos7的内核,以及安装方法供大家测试。 编译的详细方法有时间也会写上来。 感谢dog250大神对bbr相关原理和代码的解析与分享!   注意,这是一个实验性的修改,没有人对它的稳定性负责,也不担保它一定能产生正向的效果。 所以请酌情使用,at your own risk. github项目地址:https://github.com/cx9208/bbrplus # 安装方法 由于我只用centos7以及编译内核是一个相当折腾的事, 目前仅编译了适合CentOS的内核,Debian/Ubuntu回帖过80的话抽时间折腾一个。   不支持ovz CentOS一键安装脚本(自动安装内核并启用): wget -N --no-check-certificate "https://github.com/cx9208/bbrplus/raw/master/ok_bbrplus_centos.sh" && chmod +x ok_bbrplus_centos.sh && ./ok_bbrplus_centos.sh 安装后,执行uname -r,显示4.14.89则切换内核成功 执行lsmod | grep bbr,显示有bbrplus则开启成功 目前只测了vultr和cloudcone两家idc,如果出现问题,按下面的方法切回原来的内核 # 卸载方法 http://www.cnblogs.com/lolau/p/8964303.html 用这个教程切换回原来的内核,或者在vnc里重启,重启时选中原来的内核,bbrplus自动失效 对比效果: bbr原版: bbr魔改版: bbrplus: 请注意,这只是一台普通小鸡在非拥堵期的测试结果,不代表不同线路、时段都能达到这样的效果,只是个很不严谨的测试。 另外,说实话,在拥堵期这个模块仍然是跑不过锐速等暴力发包的调速器的。锐速等暴力发包的模块是对已经就很拥堵的线路的火上浇油,用火上浇油的手段来获得一个看起来更漂亮的数据,是mjj的做法。bbr更注重公平性。 最后,我更期待已经在开发中的bbr2.0了~ 本文转载至HostLoc:  https://www.hostloc.com/thread-507165-1-1.html
GPG入门指南(加密/签名)
我们平时都听过非对称加密,公钥和私钥,签名验证,但这些证书都是怎么得到的呢?本篇文章会解答这些问题。 背景介绍 加密的一个简单但又实用的任务就是发送加密电子邮件。多年来,为电子邮件进行加密的标准一直是PGP(Pretty Good Privacy)。程序员Phil Zimmermann特别为电子邮件的保密编写的PGP。 这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。 作为PGP的替代,如今已经有一个开放源代码的类似产品可供使用。GPG(Gnu Privacy Guard),它不包含专利算法,能够无限制的用于商业应用。 本文将会介绍文件加密,至于GPG的其他用途,比如邮件加密,请参考这个网站https://help.ubuntu.com 安装 本人使用mac电脑,因此使用brew安装的,很简单,打开终端,输入brew install gpg就行了,至于其他的平台,可以自行搜索。 bogon:~ XXXX$ brew install gpg ==> Downloading https://homebrew.bintray.com/bottles/gnupg-1.4.20.el_capitan.bot ######################################################################## 100.0% ==> Pouring gnupg-1.4.20.el_capitan.bottle.tar.gz ? /usr/local/Cellar/gnupg/1.4.20: 53 files, 5.4M 安装完成后,键入命令gpg --help: bogon:~ XXXX$ gpg --help gpg (GnuPG) 1.4.20 Copyright (C) 2015 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: ~/.gnupg 支持的算法: 公钥:RSA, RSA-E, RSA-S, ELG-E, DSA 对称加密:IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 压缩:不压缩, ZIP, ZLIB, BZIP2 语法:gpg [选项] [文件名] 签名、检查、加密或解密 默认的操作依输入数据而定 指令: -s, --sign [文件名] 生成一份签名 --clearsign [文件名] 生成一份明文签名 -b, --detach-sign 生成一份分离的签名 -e, --encrypt 加密数据 -c, --symmetric 仅使用对称加密 -d, --decrypt 解密数据(默认) --verify 验证签名 --list-keys 列出密钥 --list-sigs 列出密钥和签名 --check-sigs 列出并检查密钥签名 --fingerprint 列出密钥和指纹 -K, --list-secret-keys 列出私钥 --gen-key 生成一副新的密钥对 --delete-keys 从公钥钥匙环里删除密钥 --delete-secret-keys 从私钥钥匙环里删除密钥 --sign-key 为某把密钥添加签名 --lsign-key 为某把密钥添加本地签名 --edit-key 编辑某把密钥或为其添加签名 --gen-revoke 生成一份吊销证书 --export 导出密钥 --send-keys 把密钥导出到某个公钥服务器上 --recv-keys 从公钥服务器上导入密钥 --search-keys 在公钥服务器上搜寻密钥 --refresh-keys 从公钥服务器更新所有的本地密钥 --import 导入/合并密钥 --card-status…
thumbnail
nginx添加认证,使通过密码访问页面
有的时候暴漏nginx的web页面很不安全,需要添加一个认证,本文介绍使用htpasswd工具为nginx添加认证的用户名和密码。 在 nginx 下,提供了 ngx_http_auth_basic_module 模块实现让用户只有输入正确的用户名密码才允许访问web内容。默认情况下,nginx 已经安装了该模块。所以整体的一个过程就是先用第三方工具设置用户名、密码(其中密码已经加过密),然后保存到文件中,接着在 nginx 配置文件中根据之前事先保存的文件开启访问验证。 1、检查工具是否安装,如果未安装则使用yum安装 #htpasswd 有以上输出表示已经安装,如果没有按装,使用如下命令安装: yum -y  install httpd-tools   2、htpasswd选项参数 htpasswd [-cmdpsD] passwordfile username htpasswd -b[cmdpsD] passwordfile username password htpasswd -n[mdps] username htpasswd -nb[mdps] username password htpasswd命令选项参数说明 -c 创建一个加密文件 -n 不更新加密文件,只将htpasswd命令加密后的用户名密码显示在屏幕上 -m 默认htpassswd命令采用MD5算法对密码进行加密 -d htpassswd命令采用CRYPT算法对密码进行加密 -p htpassswd命令不对密码进行进行加密,即明文密码 -s htpassswd命令采用SHA算法对密码进行加密 -b htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码 -D 删除指定的用户   3、创建用户和密码文件 test为用户名 再输入密码 htpasswd -c /etc/nginx/passwd test  New password: Re-type new password:   文件内容如下: test:$apr1$V3P/kJ/E$tgtEmhu7boXUWxSnxslf0. 4、nginx配置文件修改 1)如果想要对整个站点进行加密,将以下语句添加到server段: auth_basic "Protected Elasticsearch"; auth_basic_user_file /etc/nginx/.htpasswd; 例如: server { listen 80; server_name a.com; access_log /data/wwwlogs/access_nginx.log combined; auth_basic "Protected Elasticsearch"; auth_basic_user_file /usr/local/nginx/passwd.db; 2)如果只是对某一个请求,进行加密,则需要将上述语句添加到对应的location里面: auth_basic "Protected Elasticsearch"; auth_basic_user_file /etc/nginx/.htpasswd; 例如: server { listen *:80; client_max_body_size 2048m; access_log  /var/log/nginx/elk_access.log; error_log   /var/log/nginx/elk_error.log; location / { auth_basic "Protected Elasticsearch"; auth_basic_user_file /etc/nginx/.htpasswd; http_pass http://10.1.1.1; }   修改好配置后检查配置文件的正确性: # nginx  -t 重启使配置生效: #service nginx  reload   5、增加用户 #htpasswd  -b   /etc/nginx/.passwd     test1  test123 使修改生效 #nginx -s reload 删除用户名和密码 #htpasswd -D  /etc/nginx/.passwd    test1 使修改生效 #nginx -s reload 只显示用户名、密码,不修改密码文件 #htpasswd -nb  test  [email protected] 修改密码 1)第一种方法 #htpasswd -D /etc/nginx/.passwd  test1 #htpasswd  -b   /etc/nginx/.passwd     test1  test123 2)第二种方法 #htpasswd -nb  test  [email protected] test:$apr1$6QjLCTND$GSgAMl5.a0/cKcsqFV9RX. 将之前的删除或注释掉,并将上述产生的新密码添加到密码文件里面 #vim /etc/nginx/.passwd test:$apr1$6QjLCTND$GSgAMl5.a0/cKcsqFV9RX.   使修改生效 #nginx -s reload 本文转自:https://www.cnblogs.com/cuishuai/p/7761031.html
thumbnail
分享几款PHP后门查杀软件
一、D盾_Web查杀 软件使用自行研发不分扩展名的代码分析引擎,能分析更为隐藏的WebShell后门行为。引擎特别针对一句话后门,变量函数后门,${}执行 、preg_replace执行、call_user_func、file_put_contents、fputs等特殊函数的参数进行针对性的识别,能查杀更为隐藏的后门,并把可疑的参数信息展现在你面前,让你能更快速的了解后门的情况,还加入隔离功能,并且可以还原! D盾_Web查杀官方下载地址:http://www.d99net.net/down/WebShellKill_V2.0.9.zip 2、WebShellkiller WebShellkiller作为一款web后门专杀工具,不仅支持webshell的扫描,同时还支持暗链的扫描。这是一款融合了多重检测引擎的查杀工具。在传统正则匹配的基础上,采用模拟执行,参数动态分析监测技术、webshell语义分析技术、暗链隐藏特征分析技术,并根据webshell的行为模式构建了基于机器学习的智能检测模型。传统技术与人工智能技术相结合、静态扫描和动态分析相结合,更精准地检测出WEB网站已知和未知的后门文件。 WebShellkiller官方下载地址:http://edr.sangfor.com.cn/tool/WebShellKillerTool.zip 3、河马查杀 http://www.shellpub.com/ http://www.webshell.pub/ 4、百度WebShell检测 https://scanner.baidu.com/   原文链接:https://www.hostloc.com/thread-484492-1-1.html