Nginx限制内网IP访问

allow 127.0.0.0/24;
allow 10.0.0.0/8;
allow 172.16.0.0/12;
deny all;

附加资源备忘录

地址块(CIDR)        范围                地址数量    范围    目的
0.0.0.0/8        0.0.0.0-0.255.255.255        16777216    软件    用于广播消息到当前(“this”)[1]
10.0.0.0/8        10.0.0.0-10.255.255.255        16777216    专网    用于专网内的本地通信[2]
100.64.0.0/10        100.64.0.0-100.127.255.255    4,194,304    专网    用于运营商级NAT[3]时服务提供商与其订户之间的通信
127.0.0.0/8        127.0.0.0-127.255.255.255    16777216    主办    用于本地主机的环回地址[4]
169.254.0.0/16        169.254.0.0-169.254.255.255    65536        子网    用于单个链路上两个主机之间的链路本地地址,如果没有指定IP地址,例如通常会从DHCP服务器检索[5]
172.16.0.0/12        172.16.0.0-172.31.255.255    1,048,576    专网    用于专网内的本地通信[2]
192.0.0.0/24        192.0.0.0-192.0.0.255        256        专网    用于IANA IPv4专用地址注册表[6]
192.0.2.0/24        192.0.2.0-192.0.2.255        256        文档    分配为“TEST-NET”用于文档和示例。不应该被公开使用。[7]
192.88.99.0/24        192.88.99.0-192.88.99.255    256        互联网    由6to4任意继电器使用[8]
192.168.0.0/16        192.168.0.0-192.168.255.255    65536        专网    用于专网内的本地通信[2]
198.18.0.0/15        198.18.0.0-198.19.255.255    131,072        专网    用于测试两个单独子网之间的网络间通信[9]
198.51.100.0/24        198.51.100.0-198.51.100.255    256        文档    被分配为“TEST-NET-2”用于文档和示例。不应该被公开使用。[7]
203.0.113.0/24        203.0.113.0-203.0.113.255    256        文档    分配为“TEST-NET-3”用于文档和示例。不应该被公开使用。[7]
224.0.0.0/4        224.0.0.0-239.255.255.255    268435456    互联网    保留为组播[10]
240.0.0.0/4        240.0.0.0-255.255.255.254    268435456    互联网    保留供将来使用[11]
255.255.255.255/32    255.255.255.255            1        子网    保留为“有限广播”目的地址[11]

Mysql8 版本兼容问题

先看一下查询 SELECT rownum – 1 AS ROW FROM (SELECT *, (@i :=@i + 1) AS rownum FROM xms_document, (SELECT @i := 0) AS it WHERE states=1 and catid=13 ORDER BY sortid desc,createtime desc) AS t1 WHERE id = 181

这个查询在Mysql5.7里面能正常,跑到Mysql8里面报错了。且不吐槽为啥开发这样写吧,单拆这个问题去Debug。拿到里面的子查询 SELECT *, (@i :=@i + 1) AS rownum FROM xms_document, (SELECT @i := 0) AS it WHERE states=1 and catid=13 ORDER BY sortid desc,createtime desc 发现是正常的。

最后结果发现是SELECT rownum – 1 AS ROW中ROW为Mysql关键词,最后解决加了“,修正为先看一下查询 SELECT rownum – 1 AS `ROW` FROM (SELECT *, (@i :=@i + 1) AS rownum FROM xms_document, (SELECT @i := 0) AS it WHERE states=1 and catid=13 ORDER BY sortid desc,createtime desc) AS t1 WHERE id = 181

Grafana使用技巧

1、切换图标显示在右侧【Search Option】上方。

2、时间筛选Unix时间戳用 $__unixEpochFilter(s.create_time)

3、Variables 从Mysql Query 多字段情况 使用【 SELECT field1 as __text,field2 as __value
FROM table】方式进行查询,显示的时候显示 __text,使用的时候可以使用 ${Demo:value}。

4、Row可以按变量进行Repeat。

GOGS+Drone CICD实践记录

之前一直在做Gitlab+Jenkins的CICD实践,由于这套架构太吃性能了。在小服务器上抗不住,所以构建了Gogs+Drone的CICD方案,记录下坑。

1、drone-server 1.0 版本推荐的挂载目录是 /data/drone 2.0版本推荐的挂载目录是/data

2、使用容器启动的drone,重启后再登录提示【Unauthorized】,去Gogs-用户设置-授权应用,删除之前的应用再登录即可。

3、同理,docker重启要去Gogs-项目设置里面,把之前webhook删除掉,再去drone项目把项目disable了再激活一次,解决重启后webhook的token问题。

不知道为啥drone没把webhook 和 user token 持久化下来。

iphone上mitmproxy证书设置

Mac安装mitmproxy并添加证书后,基本问题不大,都能正常运行起来

手机端iphone上下载安装mitmproxy证书:

1、手机和PC在同一个局域网中,设置wifi代理为PC端的ip,端口为mitmproxy的端口(默认8080)

2、手机浏览器访问mitm.it,下载安装mitmproxy描述文件,完成验证

3、经过上面两步,个别APP就可以访问并被mitmproxy在PC端截获,但有时发现很多APP无法上网,这时还需要添加证书的信任

“设置”——关于本机——证书信任设置——开启mitmproxy完全信任

php-fpm的进程管理模式

php-fpm的进程数可以根据设置分为动态和静态。

静态:直接开启指定数量的php-fpm进程,不再增加或者减少;
动态:开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限。
这两种不同的执行方式,可以根据服务器的实际需求来进行调整。

这里先说一下涉及到这个的几个参数吧,他们分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。

pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件给出的说明了。

下面4个参数的意思分别为:

pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置的数量个php-fpm进程。

如果dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动 pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和 pm.max_spare_servers之间调整php-fpm进程数。

那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,我们运行的PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。所以,动态方式因为会结束掉多余 的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或者VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间。

然后对于比较大内存的服务器来说,设置为静态的话会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到。比如说2GB内存的服务器,可以设置为50;4GB内存可以设置为100等。

一种是pm = static,始终保持一个固定数量的子进程,这个数由pm.max_children定义,这种方式很不灵活,也通常不是默认的。

另一种是pm = dynamic,他是这样的,启动时,会产生固定数量的子进程(由pm.start_servers控制)可以理解成最小子进程数,而最大子进程数则由pm.max_children去控制,OK,这样的话,子进程数会在最大和最小数范围中变化,还没有完,闲置的子进程数还可以由另2个配置控制,分别是pm.min_spare_servers和pm.max_spare_servers,也就是闲置的子进程也可以有最小和最大的数目,而如果闲置的子进程超出了pm.max_spare_servers,则会被杀掉。

可以看到,pm = dynamic模式非常灵活,也通常是默认的选项。但是,dynamic模式为了最大化地优化服务器响应,会造成更多内存使用,因为这种模式只会杀掉超出最大闲置进程数(pm.max_spare_servers)的闲置进程,比如最大闲置进程数是30,最大进程数是50,然后网站经历了一次访问高峰,此时50个进程全部忙碌,0个闲置进程数,接着过了高峰期,可能没有一个请求,于是会有50个闲置进程,但是此时php-fpm只会杀掉20个子进程,始终剩下30个进程继续作为闲置进程来等待请求,这可能就是为什么过了高峰期后即便请求数大量减少服务器内存使用却也没有大量减少,也可能是为什么有些时候重启下服务器情况就会好很多,因为重启后,php-fpm的子进程数会变成最小闲置进程数,而不是之前的最大闲置进程数。

第三种 pm = ondemand模式,这种模式和pm = dynamic相反,把内存放在第一位,他的工作模式很简单,每个闲置进程,在持续闲置了pm.process_idle_timeout秒后就会被杀掉,有了这个模式,到了服务器低峰期内存自然会降下来,如果服务器长时间没有请求,就只会有一个php-fpm主进程,当然弊端是,遇到高峰期或者如果pm.process_idle_timeout的值太短的话,无法避免服务器频繁创建进程的问题,因此pm = dynamic和pm = ondemand谁更适合视实际情况而定。

附各参数说明:

pm string
设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。

static – 子进程的数量是固定的(pm.max_children)。
ondemand – 进程在有需求时才产生(当请求时,与 dynamic 相反,pm.start_servers 在服务启动时即启动。
dynamic – 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。

pm.max_children int
pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置。
该选项设置可以同时提供服务的请求数限制。类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量。

pm.start_serversin
设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。默认值:min_spare_servers + (max_spare_servers – min_spare_servers) / 2。

pm.min_spare_servers int
设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.max_spare_servers int
设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.max_requests int
设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 ‘0’ 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。

nginx IF判断表达式

一、if语句中的判断条件(nginx)

1、正则表达式匹配:

==:等值比较;
~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;
~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;
!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;
!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;

继续阅读nginx IF判断表达式

Vue slot插槽继承问题

但是在实际的使用过程中,常常会出现外部组件内容需要多级嵌套传递到目标组件,那么slot可以如何实现呢?
现在假设有A,B,C三个组件,层级关系为A>B>C(父亲,儿子,孙子)

C:

<div>
    C组件
    <div>
      <slot name="pane" :data="我是C">我是c组件---外部没传递,我才显示</slot>
    </div>
</div>

B:

<div>
    B组件---这是一个中间传递的slot
    <C>
	    <div slot="pane" slot-scope="{data}">
	      <slot name="pane" :data="data"></slot>
	    </div>
    </C>
</div>

A:

<div>
    A组件
    <B>
    <div slot="pane" slot-scope="{data}">
      {{data}}注意,我要传到C了
    </div>
    </B>
</div>

转自:https://blog.csdn.net/xuxu_qkz/article/details/81115022

NC的命令使用详解

netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。

netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。

下面是一些使用netcat的例子.
继续阅读NC的命令使用详解