编译 OpenResty 找不到 OpenSSL:根因与三种解法
自己编译 OpenResty、想用系统里已装好的 OpenSSL(比如 /usr/local/openssl)时,configure 或 make 阶段经常直接报 OpenSSL 找不到——头文件找不到、config 脚本不存在、或者库文件缺失,报错形式不一。这不是 OpenSSL 没装,而是 --with-openssl 这个选项的语义和你以为的不一样。本文在 debian:12 容器里用 OpenResty-1.27.1.1(对应 nginx 1.27.1)+ OpenSSL 3.3.1 完整复现并修好了这个问题:先看报错,再讲根因,最后给三种解法(前两种均编译验证通过)。 报错现象把 configure 命令写成 ./configure --with-openssl=/usr/local/openssl(该目录是 make install_sw 装出来的标准布局:include/lib 直挂目录下),configure 一切正常,make 阶段炸出真实报错: /bin/sh: 3: ./config: not found——make 试图在 /usr/local...
Nginx 热升级:不停机替换二进制文件
Nginx 升级通常要重启服务,正在处理的连接会跟着断掉。热升级换了一种做法:USR2 信号让新旧两个 master 进程并行,新版本接新流量,旧版本把手头请求处理完再退场,全程不停机。OpenResty 的热升级流程与此完全相同。这篇把整条信号流在容器里实跑一遍——升级、验证、回退,外加一个让 USR2 静默失效的真实坑。 实验环境 Docker 容器 nginx:1.28-alpine(2026-09 实测):容器里另起一个独立实例(-p 指定前缀、独立端口),运行中的旧版本是 nginx/1.28.3。 新版本二进制是源码编译的 nginx/1.30.4(./configure --with-http_ssl_module && make 的产物 objs/nginx)——这是一次真实的跨版本二进制替换,不是同版本复制,信号流与生产升级一字不差。 原文要求照旧成立:新旧二进制的 configure 参数、依赖库版本、安装路径必须一致,缺了库的”新版本”会在运行期才暴露问题。 核心机制一句话USR2 的本质是:旧 master 把 ngi...
搭建局域网 YUM 源:createrepo 制作仓库,OpenResty 发布(Rocky Linux 9)
内网服务器访问不了公网 yum 源,打补丁、装软件就没了着落。解法是把 RPM 包集中到一台服务器,用 createrepo 生成仓库元数据,再用 OpenResty 以 HTTP 方式发布出去——客户端只需要一个 repo 文件指向这台服务器,dnf install 的体验和公网源完全一致。本文在 Rocky Linux 9.3 容器上从头到尾跑通这套流程,CentOS 7 时代的差异单独列出。 整体思路整个方案分三步: 把 RPM 包集中到服务器的一个目录 用 createrepo_c 命令创建仓库 配置 OpenResty 发布 YUM 源 需要准备两个软件: 软件 用途 版本与来源 createrepo_c 制作仓库元数据 Rocky 9 AppStream 自带,dnf install 即得 OpenResty 以 HTTP 发布仓库 1.31.1.1,官方 yum 源安装 OpenResty 的官方下载页在这里,源码编译的安装步骤可以参考这篇文章;本篇直接用官方 yum 源安装,比编译省事得多。 发布层选 HTTP 而不是 FTP 或直接共享目...
根据端口号查询进程 PID 与工作目录:netstat 加 pwdx 的组合用法
排查”这个端口到底是谁在占、程序装在哪”是运维的日常动作:告警里只有一个端口号,你得接着找出进程、找到部署目录,才能接着看日志。这篇给一个一步到位的小脚本:传入端口号,直接拿到 PID 和进程工作目录,并把管道里每一步拆开讲清楚。 实测环境:Rocky Linux 9 容器(net-tools 2.0、pwdx 来自 procps-ng)。CentOS 7/8 行为一致。 核心机制一句话netstat -nlp 能列出每个监听端口对应的”PID/程序名”,pwdx 能把 PID 翻译成进程当前的工作目录——两步接力,端口就落到了磁盘上的目录。 脚本123456789#!/bin/bash############################################################################################## The input port returns the program process path ############...
MariaDB 安装与远程访问配置:Rocky 9 实测,附 CentOS 7.6 差异
原文是 2023 年 CentOS 7.6 上装 MariaDB 的操作记录。CentOS 7 已于 2024 年 6 月停止维护,本文按实测为准重写:安装、授权 SQL、远程连接全部在 Rocky Linux 9.3(MariaDB 10.5.29)双容器环境复跑验证,CentOS 7.6 的原始环境信息保留作对照——两代系统的行为差异(恰好在这套授权 SQL 上有个大坑)在对应步骤标明。装完你能得到:一台本机可登录、远程可连接的 MariaDB 服务。 环境规划: 服务器 IP 地址 Rocky Linux 9(原文为 CentOS 7.6) 192.168.0.35 前置条件 Rocky Linux 9(或同代 RHEL 系:AlmaLinux 9 / CentOS Stream 9),root 权限;CentOS 7.6 环境可照走,但 yum 源需切 vault(见注意事项); 仓库可用(dnf makecache / yum makecache 不报错;RHEL 9 的 appstream 默认含 MariaDB 10.5); 33...
Rocky Linux 9 部署 NFS:服务端导出与客户端挂载(容器实测)
需要在多台 Linux 机器之间共享文件时,NFS 是最省事的方案之一:服务端导出一个目录,客户端把它挂载成本地路径,读写就像操作本地磁盘一样。这篇以 Rocky Linux 9 为例,把 NFS 从安装、导出、启动到客户端挂载、跨机读写的完整链路走一遍——服务端和客户端各跑在一个 rockylinux:9 容器里(同一台宿主机上的自定义网段),所有输出都来自这次实跑;文中三个典型报错也是这次故意做错复现出来的。 规划与前置条件先定好两台机器的角色、目录和 IP,后面的命令都按这张表来: 服务器 角色 目录 IP 地址 Rocky Linux 9 服务端 /export/nfs 192.168.254.2 Rocky Linux 9 客户端 /data 192.168.254.3 动手前确认三件事:两台机器网络互通(能互相 ping 通);有 root 或 sudo 权限;服务端 2049(NFS)和 111(rpcbind)端口没被防火墙拦住。内网环境一般都满足。 注:容器里复现时,导出目录要落在支持 NFS 导出的文件系统上...
源码编译 OpenSSH 9.5p1 与 OpenSSL 3.1.4:Rocky Linux 9 实测(附 CentOS 7 流程差异)
系统自带的 OpenSSH/OpenSSL 版本落后、有已知漏洞,软件源又给不了新版时,源码编译是最直接的修法。这篇把 OpenSSH 9.5p1 与 OpenSSL 3.1.4 的完整编译升级流程记录下来,并在 Rocky Linux 9.3 容器里从头到尾实跑复现,过程中还踩到一个 RHEL 9 特有的坑:新编译的旧版 sshd 读不了 el9 的 crypto-policies 配置。这类操作最大的风险是把 SSH 弄断、把自己锁在门外,所以保命措施放在最前面讲。 软件准备 软件 版本 下载 OpenSSH 9.5p1 官方 portable 页,阿里云镜像 OpenSSL 3.1.4 openssl-library.org/source 前置条件清单: root 权限;能连互联网,或备好离线依赖包(干净 Minimal 系统上 dnf install --downloadonly --downloaddir=/opt/yumsoft/ <包名> 提前拉包,已装过的包不会被下载)。 编译依赖:gcc、make、perl、z...
在 AlmaLinux 9.8 上源码安装 OpenResty 1.31.1.1
记录在 AlmaLinux 9.8 上用源码方式安装 OpenResty 1.31.1.1 的完整过程。OpenResty 官方提供 dnf/yum 仓库,但当软件要装进自定义目录(本文装到 /apps/openresty),或环境不允许接外部仓库时,源码安装更可控——所有产物收在一个前缀目录里,升级、回退、清场都不牵连系统其他部分。 两种方式怎么选:官方仓库装到固定位置 /usr/local/openresty,升级走包管理器,适合一般场景;源码方式胜在版本自选、目录自定、不依赖外部仓库可达性,适合有目录规范或内网隔离的生产环境。本文记录的是后者。 本文流程在 AlmaLinux 9.8 容器(最小安装、dnf)完整实跑通过:装依赖、编译、启动返回 200、reload/stop 退出码 0,文中截图全部来自这次实跑,无法容器化的部分会明确标注。 注:旧环境(如 AlmaLinux 9.2 装 OpenResty 1.21.4.2)的步骤与此完全一致,把下载地址里的版本号换掉即可;整套流程在 RHEL 9 系(RHEL/Rocky/Al...
SaltStack 远程执行:Targeting、常用模块与 Returner
装好 SaltStack 之后,日常用得最多的就是远程执行:一条命令让一批 Minion 同时干活。这篇把远程执行拆开讲——命令怎么构成、目标机器怎么圈定(Targeting)、有哪些常用模块、返回结果怎么落到外部系统(Returner),最后自己动手写一个模块。全部命令在 Rocky Linux 9 双容器集群(Salt 3005.4,Master/Minion 搭建见上一篇)上实测跑通,mysql Returner 部分连 MySQL 8 也一并实测。 相关文档: 远程执行文档:https://docs.saltproject.io/en/latest/topics/tutorials/modules.html 指定目标文档:https://docs.saltproject.io/en/latest/topics/targeting/index.html 执行模块文档:https://docs.saltproject.io/en/latest/ref/modules/all/index.html 返回模块文档:https://docs.saltproject.io...
SaltStack 安装、配置与 Minion 认证(Rocky Linux 9)
要在一批机器上统一执行命令、下发配置,一台台 SSH 上去敲显然不现实。SaltStack 就是为这个场景准备的:Master/Minion 架构下,控制端可以秒级触达成百上千台机器。本文在两台 Rocky Linux 9 容器上从零搭一套 SaltStack——装 Master 和 Minion、写最小配置、完成密钥认证、用 salt 命令验证通信——每一步都带验证点,照着走即可复现。 SaltStack 是什么Salt 是用 Python 开发的基础设施管理工具,部署轻松,几分钟内就能跑起来;扩展性好,很容易管理上万台服务器。核心能力三项:远程执行、配置管理、云管理。运行方式有四种:local、Minion/Master、Syndic、Salt SSH——本文主走 Minion/Master:每个受管机器装 Minion,控制端装 Master,Minion 主动连 Master 建立加密通道。 前置条件 两个节点:node1 当 Master(顺带装 Minion,让它自己也被管理),node2 只装 Minion;系统 Rocky Linux...