[踩坑] Nginx网站使用CDN之后禁止用户真实IP访问的方法
今天发现 有个IP 一直在连接 websocket 服务, 脑袋疼呀, 需要封禁IP. 服务层级 : CDN -> Nginx -> Ws服务 发现有个客户端IP 疯狂重连, 我就想着 Nginx deny 22.22.22.22; 发现没有用, 根本限制不住.上网找了下, Nginx 的 IP 只能限制直连的IP remote_addr , 我们前面有 CDN 这IP Nginx deny 不好使. 找了个靠谱的文章 搬运一下. 也收藏一下. 原文地址 : Nginx网站使用CDN之后禁止用户真实IP访问的方法做过面向公网 WEB 运维的苦逼们肯定见识过各种恶意扫描、拉取、注入等图谋不轨行为吧?对于直接对外的 WEB 服务器,我们可以直接通过 iptables 、 Nginx 的 deny 指令或者是程序来 ban 掉这些恶意请求。 而对于套了一层 CDN 或代理的网站,这些方法可能就失效了。尤其是个人网站,可能就一台 VPS,然后套一个免费的 CDN 就行走在互联网了。并不是每个 CDN 都能精准的拦截各种恶意请求的,更闹心的是很多 CDN 还不支持用户在...
Redis 字符串命令 set 的更多使用
今天看了同时的代码, 发现自己对redis的了解就是渣渣呀. $redis->set($key, $data, ['nx', 'ex' => $frequency]] 字符串的应用, 一般我们就是用作缓存, 或者自增键加锁使用. 其他业务很少用. 看到上面代码第一眼时我就懵逼了, 三参数可以是数组.先解释下上面代码意思 : $key 是否存在, 存在则设 $frequency秒 ttl有效期. 说下使用场景: 我们弄了个预警服务, 怕重复报警, 限制频率 $frequency秒内仅报警一次. nx, ex 的介绍 细节如下面文档: SETSET key value [EX seconds] [PX milliseconds] [NX|XX] 将字符串值 value 关联到 key 。 如果 key 已经持有其他值, SET 就覆写旧值,无视类型。 对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。 可选参数从 Redis 2.6.12 版本开始, SET...
Nginx 设置ip白名单
通过allow, deny模块allow 45.43.23.21;deny all; 各模块下使用方式 http{ ... allow 45.43.23.21; deny all; ...}server{ ... allow 45.43.23.21; deny all; ...}location / { allow 45.43.23.21; deny all;} 通过geo模块http模块http { ........ sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; geo $remote_addr $geo { default 1; #1表示禁止访问 127.0.0.1 0; #0表示可以访问 } ...
Mac M1 安装 homebrew
因为macbook发布的M1是基于arm架构的,导致很多软件在短时间没无法兼容,其中包括php的很多集成开发环境软件。于是需要手动配置。网上的信息也是零七八碎,故制作了这个完整的教程。 本教程基于的macbook air M1 2020 ,以`homebrew的方式。 安装 ARM 版 HomebrewARM版Homebrew需要安装在/opt/homebrew路径下,早期的时候需要手动创建目录执行命令,目前使用最新脚本不需要手动操作。 直接执行: /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)" 然后还需设置环境变量,具体操作步骤如下,一定要仔细阅读。 PS: 终端类型根据执行命令echo $SHELL显示的结果: /bin/bash => bash => .bash_profile/bin/zsh => zsh => .zprofile 如果遇到环境变量无效问题,建议回过头...
Go 语言指针符号 * 和 &
符号 & 的意思是对变量取地址如:变量a的地址是&a 符号 * 的意思是对指针取值,如:*&a,就是a变量所在地址的值,当然也就是a的值了 先看一段代码,人工运行一下,看看自己能做对几题? package mainimport "fmt"func main() { var a int = 1 var b *int = &a var c **int = &b var x int = *b fmt.Println("a = ",a) fmt.Println("&a = ",&a) fmt.Println("*&a = ",*&a) fmt.Println("b = ",b) fmt.Println("&b = ",&b) fmt.Println("*&b = ",*&b...
Go runtime.Gosched()的作用分析
runtime.Gosched()用于让出CPU时间片。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。 看代码: package mainimport ( "fmt" "runtime")func say(s string) { for i := 0; i < 2; i++ { runtime.Gosched() fmt.Println(s) }}func main() { go say("world") say("hello")} 输出结果: helloworldhello 注意结果: 1、先输出了hello,后输出了world. 2、hello输出了2个,world输出了1个(因为第2个hello输出完,主线程就退出了,第2个world没机会了) 把代码中的runtime.Gosched()注释掉,执...
Sublime Text 3 使用方法
本教程推荐使用 Sublime Text 3 作为OpenSees命令编辑器。Sublime Text 3支持Windows, Mac和Linux平台,其免费版本除了保存一定次数后会跳窗提示未注册外,其余功能与注册版本没有区别。相似的编辑器替代品还有Windows平台下的 Notepad++ , UltraEdit ,Mac平台下的 TextMate 以及终端编辑器 Vim 等。 与上一张的 CypressEditor 使用方法 不同的是,cypress editor 更像是一个 IDE(开发环境) ,而 Sublime Text 3 是一个更加纯粹的文本编辑器。如果类比 C++ 和 Python, cypress editor 就像 Visual Studio 和 PyCharm 。但是 Sublime Text 3 可以完成上述任何语言的开发。 下面介绍 Sublime Text 3 的基本使用方法。 下载和安装登陆 Sublime Text 3 的官方网站 ,进入 Download 页面,选择合适的版本,下载并安装即可。目前 Sublime Text 3 仍为测试版,但...
Mac之Sublime Text使用Go
安装Golang build 包点击 Preferences > Package control 菜单(MAC快捷键 shift + command + p) 在弹出的输入框输入 install 选择 Package control:install package 然后输入 Golang build 选择Golang build安装 设置配置参数安装好之后点击 Preferences Preferences > Package Setting > Golang Config > Setting - User 设置一些参数 { "PATH": "/usr/local/bin", // 这里改成你自己的GOPATH "GOPATH": "/Users/chenxiangan/go"} GOPATH可以通过运行go env获取 运行ctrl+b 第一次会弹出的go file run等一堆选项,直接点击run的那个,以后直接ctrl+b...
Mac添加命令别名
1. 切换到用户主目录$ cd 2. 编辑或新建.bash_profile文件3. 添加别名命令别名设置语法: alias [别名]='[指令名称]' 注意:等号两边均无空格,指令名称中如有空格,需用引号包裹 例如: alias ll='ls -Alh' 4. 重载该配置文件$ source .bash_profile 5. 查看当前所有别名设置$ alias 注:Mac别名设置与Linux大体相同,仅配置文件不同。可参考Linux alias命令
LiteIDE配置go环境 执行 BR , 抛错 see 'go help modules'
LiteIDE配置Go环境执行BR,抛错”see ‘go help modules’”的解决方法在使用LiteIDE进行Go开发时,有时在执行go build、go run等命令时会遇到错误信息”see ‘go help modules’”。这种错误通常是由于缺少或错误配置Go模块所导致的。在本文中,我们将介绍如何解决这个问题并正确配置Go环境,以便顺利执行BR命令。 步骤1:确认LiteIDE的Go环境配置首先,确保你已经正确配置了LiteIDE的Go环境。在LiteIDE的菜单栏中,选择”环境”->”设置”,进入设置窗口。在左侧的选项中,找到”Go”选项,确保设置了正确的Go安装路径和工作区路径。如果未正确设置,请进行相应的更改并点击”应用”保存设置。 步骤2:检查Go模块的配置错误信息”see ‘go help modules’”提示我们检查Go模块的配置。在LiteIDE中,我们可以通过以下步骤来确认和修复Go模块的配置: 打开终端或命令提示符窗口。 进入你的Go项目的根目录,即包含go.mod文件的目录。 执行以下命令,检查当前Go模块的状态: go m...




