TortoiseGit推送代码时报错“Disconnected no supported authentication methods available”的解决办法
一、问题现象
使用小乌龟执行push的时候,弹框报错:

二、解决方案
右键文件夹空白处,进入Tortoise的右键菜单,选择setting,弹出的界面中点击Network:

替换SSH client为git的ssh:

使用小乌龟执行push的时候,弹框报错:

右键文件夹空白处,进入Tortoise的右键菜单,选择setting,弹出的界面中点击Network:

替换SSH client为git的ssh:

breed是一个专门用于刷固件的后台,支持对系统当前的数据进行操作。breed是刷固件最重要的一步,K2系统默认的版本已经做了限制,不能直接刷上breed,需要在网上找教程刷。
我手里的这个路由器原来刷过,因此这里略过这一步。
进去breed的方法
http://192.168.1.1。breed首页:

相关资源地址:
下载固件在百度网盘下载,K2的固件名字是:RT-AC54U-GPIO-1-PSG1218-64M,不要下错了。
进入breed,固件更新页面选择下载的固件,然后点击上传(注意勾上自动重启选项):

确认固件信息,主要是对比MD5是否正确,原始的MD5在百度网盘中有下载。确认无误后点击更新开始刷固件:

刷固件需要1-2分钟时间,耐心等待,不要断开电源:

刷入完成后,设备自动重启,等待一两分钟系统启动:

Padavan固件的首页是192.168.123.1,默认密码是admin/admin,启动后在浏览器直接访问:

大功告成!
搭了一个开源图床,因为备案的原因部署在海外。访问速度太慢准备上CDN(有一个已备案的域名),但是在部署CDN的途中就出现了各种问题。鼓捣了几天终于解决了,记录下踩坑记录和解决方案。
软件环境:

图床是直接用docker部署了,没有再手动去折腾lnmp环境了,别人已经准备好的docer环境拿过来就直接用了。
用一个nginx作为CDN和图床服务的代理客户端,不直接把图床暴露出来了,也是一般服务的部署方式。
平常的服务大部分都是这么干的,用起来很舒服。
这个部署在http环境下是没有问题的,能正常使用。但是把http改成https的时候就出问题了,一开始的问题就是跨域:

因为nginx是配置的http反向代理:proxy_pass http://127.0.0.1:xxxx,到docker中的也是http,所以它返回到前端的js/css资源也是http的。而此时CDN开启了强制https,浏览器中已经是https,跨域就这么产生了。
为了解决这个问题,就在docker的web环境中也加一个强制https跳转,想着apache也强制https,那么就不会返回http资源,跨域解决。
想象是美好的,现实是残酷的,这么一配置之后,CDN就挂了,原因:重定向次数过多。
于是分析了一下,这么干确实有问题:

于是乎,CDN和apache之间就产生了某种误会,导致302死循环诞生!因此,这么干不行!得另寻它法。
那么现在的问题就产生了:如何圆润的以https的方式访问到docker内部的资源?
方案一:nginx和apache改成https通信
这个方案要做的工作:
apache不熟悉,看了https部署比nginx要麻烦一些,而且内部通信也用https对性能有影响,所以就不考虑了(虽然这个方法可能比较有效,但是内心比较排斥apache,甚至想把docker中的apache换掉都不想用它配置https)。
方案二:使用nginx的sub_filter替换http为https
验证了一下,不可行,因为实际上返回到客户端的资源文件都是相对文件目录,不是http的全路径资源。
于是就崩了,百度了几天也没有办法解决。最后,在google上搜,竟然一下就找到了解决方案。
设置http头部X-Forwarded-Proto,这个头部的作用是用于识别协议(HTTP 或 HTTPS),主要针对内部访问重定向时的协议。因此,只要在反向代理时添加以下配置就好了:
proxy_set_header X-Forwarded-Proto $scheme;$scheme是nginx的内部变量,表明当前访问的协议,当前如果是https,那么转发到后台服务的时候就是https。这样问题就解决了。
静态数组和动态数组区别
静态数组是编译时就分配好大小的数组,内存在栈区(全局数组在全局区),能分配的大小有限,受限于栈的大小。动态是程序运行后动态调用malloc或者new生成的,内存在堆区,可分配大小相较于栈区较大。
static的作用
sizeof的作用
C++
new/delete/new[]/delete []/malloc/free的区别RAII/pimpl的惯用方式STL
其他
fork和wait有什么作用,fork进程时的操作。connect/accept/bind/listen/send/sendto/recv/recvfrom/select/gethostbyname。select/poll/epoll。connect、send以及recv等行为上的区别,如何将socket设置为非阻塞的。libevent和reactor模式。poll和epoll没有。send/recv以及read/write返回值大于0、等于0、小于0的区别,错误码EINTR如何处理。crontab和iptables等命令的的使用top/strace/pstackmemstat/freeiostat/df/ductime/mtime/atime)和inode等scp/rz/sz命令find/whereis命令ln命令的用法,硬链接和软连接区别lsof命令kill用法,某个进程杀不掉的原因(进入内核态,忽略kill信号)|grep的使用awk/sed/grep
alpine是一个轻量级的linux系统,由于太轻量了,目前被广泛用于docker镜像的制作上了(最新版的docker镜像才5M)。
体积小就有缺点了,缺点就是内部除了基本的命令以外,大部门的功能都不支持,默认连bash都没有。需要自己手动添加并重新构建。
1. 基于alpine:3.8添加bash并设置阿里云源
FROM alpine:3.8
MAINTAINER MaQian
RUN echo "https://mirrors.aliyun.com/alpine/v3.8/main/" > /etc/apk/repositories
RUN apk update \
&& apk upgrade \
&& apk add --no-cache bash bash-doc bash-completion \
&& rm -rf /var/cache/apk/* \
&& /bin/bash2. 基于最新版alpine并设置阿里云源
相比上面的多了一个获取当前版本的逻辑,Dockerfile如下:
from alpine:latest
MAINTAINER MaQian
RUN alpine_version=`cat /etc/issue | head -1 | awk '{print $5}'` \
&& echo "https://mirrors.aliyun.com/alpine/v${alpine_version}/main/" > /etc/apk/repositories \
&& apk update && apk upgrade && apk add --no-cache bash bash-doc bash-completion \
&& rm -rf /var/cache/apk/*
CMD ["/bin/bash"] 使用golang编译了一个二进制程序,在CentOS和Ubuntu的镜像上运行是可以的,但是在Alpine运行就不行,使用./运行报错:
/bin/sh: ./saas_server: not found
编译时添加参数CGO_ENABLED=0,关闭CGO就可以了:
CGO_ENABLED=0 go build
Installed Go binary not found in path on Alpine Linux Docker
Let's Encrypt SSL证书是一个免费的公益项目,由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。
使用Let's Encrypt生成域名证书的前置条件:
第一步:拉代码,代码开源于Github。
> git clone https://github.com/letsencrypt/letsencrypt
Cloning into 'letsencrypt'...
remote: Enumerating objects: 29, done.
remote: Counting objects: 100% (29/29), done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 61424 (delta 7), reused 4 (delta 2), pack-reused 61395
Receiving objects: 100% (61424/61424), 20.12 MiB | 5.01 MiB/s, done.
Resolving deltas: 100% (44625/44625), done.完成后执行命令生成证书:
> ./certbot-auto certonly -d *.maqian.art --manual \
> --preferred-challenges dns \
> --server https://acme-v02.api.letsencrypt.org/directory解释一下各个参数的含义:
certonly: 表示当前为安装模式--manual: 表示手动安装插件,不要自动安装了--preferred-challenges dns: 校验方式为dns验证-d *.maqian.art: 要生成的域名列表,可以为多个,如果是多个分别以-d加上即可--server: Let's Encrypt ACME v2版本使用的服务器接下来的步骤一直接受即可,直到出现添加DNS记录为止:
Requesting to rerun ./certbot-auto with root privileges...
[sudo] password for ma:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): maqian@dyxmq.cn
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for sinfor.maqian.io
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.maqian.art with the following value:
zw1MeEkmGZOqSqiySp9Ke8S5a9BXC3O4tYzlbjwU-CU
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue此时需要在DNS服务商处添加dns解析,记录类型为TXT,记录为_acme-challenge,值为zw1MeEkmGZOqSqiySp9Ke8S5a9BXC3O4tYzlbjwU-CU。当DNS记录设置好后,新开一个终端查询解析是否生效:
> nslookup -type=txt _acme-challenge.maqian.art
Server: 100.100.2.136
Address: 100.100.2.136#53
Non-authoritative answer:
_acme-challenge.maqian.art text = "zw1MeEkmGZOqSqiySp9Ke8S5a9BXC3O4tYzlbjwU-CU"
Authoritative answers can be found from:
当查询到的记录和给定的都一致之后按下任意键执行下一步,如果DNS验证成功就会出现以下信息:
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/maqian.art-0001/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/maqian.art-0001/privkey.pem
Your cert will expire on 2019-03-22. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
此时就表示证书已经申请完成了,存放的路径为:/etc/letsencrypt/live/maqian.art-0001。
> sudo ls /etc/letsencrypt/live/maqian.art-0001/ -l
total 4
lrwxrwxrwx 1 root root 39 Dec 22 23:46 cert.pem -> ../../archive/maqian.art-0001/cert1.pem
lrwxrwxrwx 1 root root 40 Dec 22 23:46 chain.pem -> ../../archive/maqian.art-0001/chain1.pem
lrwxrwxrwx 1 root root 44 Dec 22 23:46 fullchain.pem -> ../../archive/maqian.art-0001/fullchain1.pem
lrwxrwxrwx 1 root root 42 Dec 22 23:46 privkey.pem -> ../../archive/maqian.art-0001/privkey1.pem
-rw-r--r-- 1 root root 692 Dec 22 23:46 README上面一共生成了四个文件,各自的用途为:
cert.pem: Apache服务器端证书chain.pem: Apache根证书和中继证书fullchain.pem: Nginx所需要ssl_certificate文件privkey.pem: 安全证书KEY文件部署到nginx只需要添加一下指令即可:
ssl on;
ssl_certificate /etc/letsencrypt/live/maqian.art-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/maqian.art-0001/privkey.pem;打开网站,点开左上角地址栏的https,查看证书:
docker默认存在/var/lib/docker目录下,一般情况下这个目录都没有单独挂载,都是放在根目录下的,目录较小。

为了避免占用太多/var目录空间,并且方便管理,可以把存储目录放到其他的文件夹,例如/data/docker。
创建想要修改的目录,假设是/data/docker,首先创建文件夹并赋予权限。
> mkdir /data/docker
> chgrp -R docker /data/docker停掉docker,修改docker的systemd服务文件,位于/usr/lib/systemd/system/docker.service,修改ExecStart一行:
> systemctl restart docker
> sed -i 's#ExecStart=/usr/bin/dockerd#ExecStart=/usr/bin/dockerd --graph /data/docker#g' /usr/lib/systemd/system/docker.service重启docker:
> systemctl daemon-reload
> systemctl start docker 验证是否修改成功:
> docker info | grep "Root"
Docker Root Dir: /data/docker
> ll /data/docker/
total 48
drwx------ 2 root root 4096 Dec 22 22:39 builder
drwx--x--x 3 root root 4096 Dec 22 22:39 containerd
drwx------ 2 root root 4096 Dec 22 22:39 containers
drwx------ 3 root root 4096 Dec 22 22:39 image
drwxr-x--- 3 root root 4096 Dec 22 22:39 network
drwx------ 3 root root 4096 Dec 22 22:39 overlay2
drwx------ 4 root root 4096 Dec 22 22:39 plugins
drwx------ 2 root root 4096 Dec 22 22:39 runtimes
drwx------ 2 root root 4096 Dec 22 22:39 swarm
drwx------ 2 root root 4096 Dec 22 22:39 tmp
drwx------ 2 root root 4096 Dec 22 22:39 trust
drwx------ 2 root root 4096 Dec 22 22:39 volumes
nginx中只有if关键字,并不支持else语法,if的使用方法为:
if ($xxx = xxx) {
xxx
}和代码不同的是:if条件语句判断相等时只要一个等号,不能是==。
虽然不支持else,但是可以使用以下的方法来模拟实现else:
server {
server_name *.maqian.io;
listen 80;
location / {
set $is_matched 0;
if ($host = a.maqian.io) {
proxy_pass http://127.0.0.1:1001/;
set $is_matched 1;
}
if ($host = b.maqian.io) {
proxy_pass http://127.0.0.1:1002/;
set $is_matched 1;
}
# 没有匹配到,跳转到默认页面
if ($is_matched = 0) {
proxy_pass http://127.0.0.1;
}
# xxx
# xxx
# xxx
}
} ngx_http_limit_conn_module是一个默认安装的内置模块,被用来限制在某一个关键字维度上的最大并发数量,通常情况下,这个维度被设置为访问者的IP。在计算的一个连接当前的并发数量时,不是一连接就会被计数,而是当所有请求头都被读完才计数。它的示例配置为:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
# ...
server {
# ...
location /download/ {
limit_conn addr 1;
}
}
}以上配置通过limit_conn_zone指令定义了一个名为addr的并发限制器,它以$binary_remote_addr(即访问的IP地址)作为key,分配一块10m的空间来保存所有的连接数量。
而后的对应的server段中,使用这个addr,限制同一时刻最多只能有1个连接。所以整个配置的意思就是:限制单个IP同一时刻最多有3个访问连接。
相关的参考文档:Module ngx_http_limit_conn_module。
当前有一个站点d2.maqian.co,希望同一时刻同一IP最多只能3个并发访问:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m
server {
listen 80;
server_name d2.maqian.co;
limit_conn addr 3;
limit_rate 1m; # 限制访问速率1M/s
location / {
root html;
index index.html index.htm;
}
access_log logs/access.log main;
error_log logs/error.log;
}
}
网站的根目录下有个文件master.zip,大小8.8M,在另一台客户端上使用ab命令执行并发测试:
ab -c 5 -n 10 http://d2.maqian.co/master.zip # 同一时刻5个并发连接,一共10个连接测试过程中Nginx的访问日志:
> cat access.log
192.168.123.101 - - [20/Oct/2018:17:45:19 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:19 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:19 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:19 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:19 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:19 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:19 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:27 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:27 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:17:45:27 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"可以看到,除了3个连接的的返回值为200以外,其他的都返回状态码503。
为什么三个200访问的日志在最后呢?
因为下载的文件内容是8.8M,配置中有限制最大下载速率为1M/s,所以它大概需要9秒才能下载完成,状态码是在连接返回完成才打印出来的,并且可以看到503状态码和200状态码的日志间隔差不多刚好8-9s。
那为什么要限制下载速率呢?
当前在内网环境下,下载速度非常快,8.8M的文件几乎1S内就能下载完成,连接很难并发,即使并发了,10个连接也很有可能有多个成功了。
和上面同样的环境,我们不限制单个IP的并发访问数量,而希望同一时刻服务器最多处理10个连接:
http {
limit_conn_zone $server_name zone=web_server:10m;
server {
listen 80;
server_name d2.maqian.co;
limit_conn web_server 10;
limit_conn_log_level info;
limit_rate 1m;
location / {
root html;
index index.html index.htm;
}
access_log logs/access.log main;
error_log logs/error.log;
}
}执行命令测试:
ab -c 11 -n 15 http://d2.maqian.co/master.zip # 同时产生11个连接,一共访问15次nginx访问日志:
192.168.123.101 - - [20/Oct/2018:18:23:49 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:49 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:49 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:49 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:49 +0800] GET "d2.maqian.co/master.zip" 503 537 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"
192.168.123.101 - - [20/Oct/2018:18:23:58 +0800] GET "d2.maqian.co/master.zip" 200 9204205 "-" "ApacheBench/2.3" "-"限制了同一时刻服务端只能有10个连接之后,现象也和上面的一样,15个连接有5个返回错误,但是不同的是这些连接可以同时来自于同一个IP。
上面的基于IP和服务端访问限制可以同时使用,并且不只是这两个字段可以配合使用,其他的变量也都可以同时使用,具体的变量可以参考:Alphabetical index of variables。
例如我们可以同时限制单个IP并发连接数为3,并且同时访问服务端的连接数为100:
http {
limit_conn_zone $server_name zone=web_server:10m;
limit_conn_zone $binary_remote_addr zone=addr:10m
server {
listen 80;
server_name d2.maqian.co;
limit_conn web_server 100; # 同一时刻最多100个连接访问服务端
limit_conn addr 3; # 同一时刻同一IP最多3个连接访问
limit_conn_log_level info;
limit_rate 1m;
location / {
root html;
index index.html index.htm;
}
access_log logs/access.log main;
error_log logs/error.log;
}
}ngx_http_limit_req_module模块用于限制每个IP访问某个关键字维度的请求速率,其参数用法如下:
limit_req_zone key zone=name:size rate=rate;以上的配置创建一个速率限制器,限制单个IP在key这个维度上的访问速率。和上面一样,这个key也通常被设置成访问者的IP。使用时在对应的server段内设置:
limit_req zone=name [burst=number] [nodelay];burst表示令牌数量,连接满了之后,给接下来的连接发放令牌进行等待。令牌数量超出后,可以选择继续等待令牌或者直接返回错误状态。
这里的逻辑可以看成去银行办业务:人多的时候需要等号,number可以堪称最大的等号数量,rate可以堪称银行的窗口个数。银行同一时刻处理rate个客户的请求,并且同时允许number个客户排队,超出后,根据nodelay是否被设置来判断该连接是应该被丢弃还是等待。
参考文档:Module ngx_http_limit_req_module。
http {
# 以请求IP作为KEY,设置访问频率为1秒1次请求
limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s;
server {
listen 80;
server_name d2.maqian.co;
# 设置队列为5,最多有5个连接等待,超出的不继续等待
limit_req zone=addr burst=5 nodelay;
limit_rate 1m;
location / {
root html;
index index.html index.htm;
}
access_log logs/access.log main;
error_log logs/error.log;
}
}为了避免大文件下载耗时,这里不再和上面一样下载大文件,使用小文件测试:
ab -c 6 -n 100 http://d2.maqian.co # 6个并发连接,访问100次得到日志后,复制到当前目录下,分别分析200和503响应的次数:
> grep "503" access.log | wc -l
94
> grep "200" access.log | wc -l
6nginx第一秒处理第一个请求,同时给接下来的5个请求排队,剩下的都直接返回503,所以返回200的次数为6,503的次数为94。
ab返回的结果也能看到成功和失败的数量:
