29日下午正好有时间例行网站应用代码升级维护,正好发现nginx HTTP3模块进行了更新,一直关注HTTP3的发展,网站一开始使用的是Cloudflare开发的HTTP3扩展,等nginx官方有了HTTP3支持后也是第一时间升级了,由于本站架构运行在Docker之上,所以这次升级也就改一下nginx代码库commit id,然后重新编译Docker镜像,一直都是这么升级,结果今天翻车了。 由于编译一次Docker镜像需要耗费较长时间,所以我会习惯性把一些该升级的组件进行一次升级:例如更新频率比较高的BoringSSL。这次还发现了ngx_brotli这个很长时间没有更新的扩展也有了更新记录,顺带也升级到最新commit。 完成编译后便直接将这个最新版本的nginx镜像推送至registry,然后服务器同步拉取(pull)完成更新容器更新,由于没有测试直接更新容器,结果炸了。受问题镜像同步 …

看门狗(Watchdog)应该是计算机世界中较为形象的一个动物化的特性,就好像光猫和鼠标一样,在那个混沌初开的计算机时代,技术专家和极客们总会给冷冰冰的机器赋予身边活物的灵性。看门狗的功能简要的来说就是侦测到设备异常并恢复设备状态,这里的恢复一般是重启,就好像公司IT部门在接到设备报障电话总是会问一句:“您尝试重启设备了吗?”,确实,重启能解决绝大部分故障,重启后的设备也能工作在较好的状态,随着时间的推移,待故障再次发生的时候怎么办?再重启一下呗。如果无法确认故障的原因或者无法解决故障,那么重启确实很好,但是这仍然需要有人值守,手动重启。看门狗的出现就是为了解决这个痛点,看门狗每间隔一段时间(Interval)会检测设备状态,检测的方式就是一系列测试(Test),如果测试不通过则自动重启。 第一次接触到看门狗(Watchdog)功能还是在树莓派(Raspberry Pi),当时硬件清单说明 …

经过一段时间的实践,目前我的IT基础设施基本上完成了向Docker容器化的迁移,通过容器的隔离大大减轻了运维的负担,尤其对于我个人来说,可以专注于业务代码的实现,在容器化的具体实践中也遇到一些问题,本文介绍的就是其中容器内进程管理和僵尸进程(Zombie Process)的消除。 1 Linux init进程 使用过Linux系统的同学可能对init这个进程并不陌生,此进程也是内核启动的第一个进程,PID为1,此进程包含多个任务,其中重要的任务之一:接管孤儿进程和消除僵尸进程。 孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程,而僵尸进程是指子进程先于父进程结束,而父进程没有调用wait或者waitpid等待,这样结束的子进程将会变成僵尸进程,系统会自动将孤儿进程和僵尸进程过继给PID为1的init进程,这样init进程重新成为孤儿进程的父进程并给僵尸进程收尸(消除),避免大 …

如何确定公网IP地址是一个让很多家用宽带朋友们经常遇到的问题,毕竟固定IP地址总是价格不菲因而不适用于家庭宽带,而我们的电信宽带运营商(ISP)往往给我们分配的是动态IP地址,之所以称作为动态IP地址,是因为每次拨号得到的IP地址可能会不一样,还有更骚的操作就是有的运营商每天或不定期在某个时间刷新IP地址池,这样已经获得的IP地址将会被强制释放并分配新的IP地址,这对于我们一些运行在家用带宽下的服务带来了影响——需要重新设置服务端IP地址,比如监控、网络存储等等,这时候DDNS就发挥作用的,现在大部分路由器内置了DDNS客户端,比如花生壳等服务客户端,但是这些客户端存在收费、不稳定以及刷新间隔小等问题,对于自己有域名的朋友可以使用DNS服务商的API自己实现IP更新操作,比如阿里云(Aliyun)、Cloudflare均可以实现。 对于DDNS如何使用API更新不在本文叙述范围内,但调用 …

记得很久以前看过一个留学生使用华为上网棒架设越洋VOIP服务器实现境外使用国内SIM卡拨打电话的文章,颇为有意思,操作简单来说就是购买华为特定型号的USB上网棒(Dongle Modem),手机卡使用特定运营商的SIM,当然这里选择最便宜的套餐,国内使用树莓派安装RasPBX系统,将上网棒接入树莓派,配置FreePBX之后就可以愉快使用树莓派接打电话或收发短信了,而且在地球的任意角落也可以通过互联网实现境内通话资费。 一直对这种新鲜Geek范儿的事情比较感兴趣,正好手头闲置有树莓派,于是动手实施,当然本着不折腾不舒服的理由,我没有直接安装RasPBX这个定制的系统,当然另外的考虑就是树莓派仅作为话务中心服务对于我来说没有充分榨干其价值,毕竟上面还跑有其他各种特殊的服务,于是参考了RasPBX的定制脚本开始了折腾之路......遗憾的是这个事情已经过去有六七年了,当时没有记录折腾的步骤,虽然 …

日常运维中经常会接触到SSH(Secure Shell,安全外壳协议),通过SSH登录到要管理的服务器,通过各种命令完成整个服务器的维护,这个过程在内网中或者网络质量较高的时候总是很顺畅,但是当网络质量比较差的时候就会出现意外断开连接的情况了,比如比较常见的报错Socket error Event: 32 Error: 10053,这时候往往需要我们重新发起SSH连接,问题是新发起的连接无法继续上一个连接执行的命令,比如在断开连接前我们在虚拟终端执行了一个需要长时间等待的Shell命令,但是命令没执行完网络中断了,实际上此时的命令仍然在执行,如果遇到需要交互的部分还会停下来,只是我们新的连接将看不到命令的输出,可以通过ps aux | grep 进程名定位到进程。本文将介绍对于此类问题的应对方法供参考 1 终端的概念 1.1 什么是TTY TTY 是 Teletype 或 …

一些项目中对外服务需要开放一些API接口,常见也是最易用的就是使用GET方式向URL传参查询字符串(Query String),这种方式的缺点主要有①传输的数据需要进行URL编码(URL Encode);②受到URL最大长度限制,超过限制则有可能被Web服务器拒绝;③一种可能的安全缺陷就是Web服务器的日志有可能暴露敏感信息,比如查询字符串传递了密码,虽然使用HTTPS加密传输的URL能够避免被中间人拦截识别敏感信息,但是无法避免服务器端Web应用日志记录的问题,敏感信息可能会通过日志暴露给审计人员或者攻击者。 可能有读者会考虑使用POST方法是不是能够避免这些问题,确实对于复杂数据传输场景使用POST方式更为合适,因为POST请求的载荷(Payload)主要位于HTTP请求的主体(Body)部分,除非特殊配置,否则有效避免了②和③,对于①,常见的POST主体编码是表单模式,常见提交表单就 …

nginx作为反向代理服务器一直以轻巧高效著称,在日常实践中我将其作为项目的反向代理应用前端并取得了不错的效果,这里记录nginx其中利用njs模块的脚本支持读取ipset黑名单(白名单)从而实现访问控制列表(Access Control List)的方法,做法仅供参考,如有想法欢迎评论提出。 1 主要背景 1.1 问题的提出 互联网环境日益复杂和危险,对于新上线的服务器主机来说,每天都将面临大量的漏洞扫描、DDoS攻击,对于配置不当或者存在安全漏洞的主机,很容易就会沦为跳板机或者挖矿机,继而攻击网络中其他主机或者白白消耗宝贵的计算资源,对于互联网威胁我认为有必要采取积极的防御策略。 1.2 基本的防御策略 主要有这几种手段:① 关注安全公告并及时打补丁避免漏洞;② 复杂的身份认证策略,避免弱口令存在于SSH或者数据库系统中,建议采取证书或者key方式完成认证流程;③ 最小权限划分原则,避 …

Docker默认是不开启IPv6支持的,但是我们某些业务往往又需要IPv6的支持,特别是IPv6普及大势所趋,本文主要介绍的是如何开启Docker桥接网络IPv6支持,这篇文章具体操作仅供参考,建议以官方文档为准。 本文最重要的先决条件是主机商已经分配给你一个公网IPv6地址段,我们可以通过查看主机控制面板中信息、询问主机供应商或者直接SSH登录主机使用命令ip -f inet6 addr show eth0获取。命令方式获取的ipv6地址输出如下: 6: eth0: mtu 9000 inet6 2607:f0d0:1002:51::4/64 scope global valid_lft forever preferred_lft forever inet6 fe80::230:48ff:fe33:bc33/64 scope link …

维护的一台服务器近期做了异地备份,具体的做法实际上也很简单,通过任务计划每日午夜将数据库备份文件压缩,再通过群晖的Cloud Station Backup回传至异地群晖NAS中,当然群晖NAS做了多盘RAID,这样数据也多了一层保护,本来数据库备份这里也考虑看能否使用第三方软件,结果在搜索时找到了微软官方的解决方案《Schedule and automate backups of SQL Server databases in SQL Server Express》,简单易用,比较nice~ 这里再简单记录一下,作为一个备忘,以下操作仅供参考,建议大家先测试确保无误后再运用在生产服务器上,本人不对下面操作带来的可能数据损坏等问题负责,敬请理解。 1 备份数据库 1.1 安装必须的软件 这个是先决条件,一般服务器上可能缺少这些软件,如果不安装将无法使用下面的命令,当然你也可以使用替代命令,这 …
  • 1

Some archived posts that were written in Simplified Chinese before the year 2021 were moved to and it may never update.