当前位置: 首页 > news >正文

内网环境搞定OpenResty离线安装:从依赖包下载到避坑全记录

企业内网环境下的OpenResty离线部署实战指南

在金融、政务等对网络安全要求极高的行业场景中,生产环境往往部署在严格隔离的内网中。这种环境下,常规的yum install一键安装方式完全失效,而OpenResty作为基于Nginx的高性能Web平台,其复杂的依赖链让离线安装成为许多开发者的噩梦。本文将分享一套经过大型银行项目验证的完整解决方案,从依赖包下载到编译避坑,带你彻底攻克内网环境下的OpenResty部署难题。

1. 离线环境准备工作

1.1 构建离线资源库

在有外网权限的跳板机上执行以下操作,创建完整的依赖包仓库:

# 创建依赖包下载目录 mkdir -p /opt/offline-packages/{openresty,openssl,dependencies} # 下载OpenResty官方包 wget https://openresty.org/download/openresty-1.21.4.1.tar.gz -P /opt/offline-packages/openresty # 使用yum的downloadonly插件获取依赖 yum install yum-plugin-downloadonly yum install --downloadonly --downloaddir=/opt/offline-packages/dependencies \ gcc make perl pcre-devel openssl-devel zlib-devel

关键点说明:

  • 通过--downloaddir参数指定rpm包存储位置
  • 必须包含的开发工具链:gcc、make、perl
  • 核心依赖库:pcre-devel、openssl-devel、zlib-devel

1.2 处理嵌套依赖的技巧

使用repotrack工具解决复杂的依赖关系:

# 安装repotrack工具 yum install yum-utils # 下载完整依赖树 repotrack -a x86_64 -p /opt/offline-packages/dependencies \ openssl-devel pcre-devel zlib-devel

将整个/opt/offline-packages目录打包后传输到内网环境:

tar czvf openresty-offline.tar.gz -C /opt/offline-packages .

2. 内网环境部署实战

2.1 离线安装系统依赖

在内网服务器上解压资源包后,使用以下脚本批量安装依赖:

#!/bin/bash OFFLINE_DIR="/opt/offline-packages" # 安装基础依赖 for rpm in $(ls ${OFFLINE_DIR}/dependencies/*.rpm); do rpm -ivh --nodeps --force $rpm 2>&1 | grep -v "already installed" done # 验证安装 for package in gcc make pcre-devel openssl-devel zlib-devel; do rpm -qa | grep $package || echo "[WARNING] $package not installed" done

常见问题处理:

  • 遇到already installed提示可忽略
  • 若出现依赖缺失,使用rpm -qpR <package.rpm>查看具体依赖关系

2.2 OpenResty编译安装

解压并编译OpenResty源码:

tar xzvf openresty-1.21.4.1.tar.gz cd openresty-1.21.4.1 ./configure --prefix=/usr/local/openresty \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-pcre-jit \ --with-stream make -j$(nproc) && make install

关键配置参数说明:

参数作用内网环境特别注意事项
--with-pcre-jit启用PCRE正则表达式JIT编译需确保pcre-devel已安装
--with-http_ssl_module启用HTTPS支持依赖openssl-devel
-j$(nproc)多核并行编译大幅提升内网环境编译速度

3. OpenSSL源码编译避坑指南

3.1 特定版本OpenSSL编译

在内网环境中,系统自带的OpenSSL往往版本不匹配,需要手动编译:

# 解压openssl源码 tar xzvf openssl-1.1.1g.tar.gz cd openssl-1.1.1g # 静态编译方式 ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl no-shared make depend make && make install # 更新系统库链接 echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl.conf ldconfig -v

验证安装结果:

/usr/local/openssl/bin/openssl version

3.2 常见编译错误解决

错误1:SSL modules require the OpenSSL library

解决方案:

  1. 确认OpenSSL头文件路径:
    find / -name opensslv.h
  2. 在configure时指定正确路径:
    ./configure --with-openssl=/usr/local/openssl ...

错误2:undefined reference to EVP_xxx

这是典型的链接库路径问题,解决方法:

export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH

4. 生产环境配置优化

4.1 文件类型识别优化

针对前端静态资源加载问题,修正mime.types配置:

http { include mime.types; default_type application/octet-stream; # 扩展支持的文件类型 types { text/css css; application/javascript js; image/svg+xml svg; font/woff2 woff2; } server { location ~* \.(?:css|js|svg|woff2)$ { expires 365d; add_header Cache-Control "public"; } } }

4.2 Lua模块使用规范

正确处理不同阶段的Lua脚本执行:

指令执行阶段典型用途注意事项
access_by_lua访问控制阶段IP白名单、权限校验不能产生响应输出
content_by_lua内容生成阶段动态内容生成会终止后续处理阶段
header_filter_by_lua响应头处理阶段修改响应头信息不能读取请求体

示例代码:

location /api { access_by_lua ' local ip = ngx.var.remote_addr if not check_ip(ip) then ngx.exit(403) end '; content_by_lua ' ngx.say("{\"status\":\"OK\"}") '; }

5. 系统集成与维护

5.1 服务化管理配置

创建systemd服务文件/etc/systemd/system/openresty.service

[Unit] Description=OpenResty HTTP Server After=network.target [Service] Type=forking PIDFile=/usr/local/openresty/nginx/logs/nginx.pid ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t ExecStart=/usr/local/openresty/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target

管理命令:

# 重载systemd配置 systemctl daemon-reload # 开机自启 systemctl enable openresty # 启动服务 systemctl start openresty

5.2 环境变量配置

永久添加OpenResty到系统PATH:

echo 'export PATH=/usr/local/openresty/bin:/usr/local/openresty/nginx/sbin:$PATH' >> /etc/profile.d/openresty.sh source /etc/profile.d/openresty.sh

验证安装:

nginx -v resty -v
http://www.jsqmd.com/news/519314/

相关文章:

  • 佛山宏昭自动化技术有限公司是做什么的?主营产品、业务范围及服务优势全解析
  • 用HTML5 Canvas和原生JS手搓一个Emoji消消乐(附完整源码和算法解析)
  • Comsol声子晶体能带计算,包含六角晶格不同原胞的选取以及简约布里渊区高对称点选择
  • simulink仿真 双机并联逆变器自适应虚拟阻抗下垂控制(Droop)策略模型 逆变器双机并联
  • Ubuntu18.04虚拟机300GB配置全攻略:Vivado2019.2+Vitis+Petalinux一站式安装
  • 从Tacotron到智能语音:端到端语音合成的原理、应用与未来
  • 《情报分析与研究》第三周课程笔记
  • 真的太省时间! 降AIGC工具 千笔·降AI率助手 VS 灵感风暴AI 全领域适配
  • ArcGIS数据驱动页面隐藏技巧:这样设置‘裁切’与‘排除图层’,让你的专题图效果提升一个档次
  • COMSOL求解计算流体力学中动压润滑方程组的2D模型案例
  • 从SMS网格到FVCOM:.grd与.2dm文件结构解析与海洋建模实战
  • 超声波探伤技术在工业检测中的前沿应用与创新突破
  • 计算机毕业设计springboot基于的地铁综合服务管理系统的设计与实现 基于SpringBoot框架的城市轨道交通运营服务平台设计与实现 基于Java技术的地铁乘客服务与内部协同管理系统开发
  • LeetCode 48 1886.矩阵旋转与判断
  • 1588v2协议实战:如何在工业自动化场景中实现纳秒级时间同步?
  • 别再乱用to_dict了!Pandas数据转换orient参数避坑手册(附场景对照表)
  • STM32入门(13)
  • AutoGen Manager-Broadcast机制详解:手把手教你配置多代理聊天组(含Python代码示例)
  • 字符串 I:border 理论 I
  • 计算机毕设 java基于微信小程序点餐系统的设计与实现 微信小程序智能点餐平台开发 基于 SpringBoot 的餐饮在线点餐系统设计
  • 避坑指南:WRF下垫面数据替换中的5个常见错误及解决方法(基于GDAL转换经验)
  • 从西工大网安导论出发:构建网络空间安全的知识体系与实践视角
  • Hyper-V虚拟机安装Deepin避坑指南:从镜像选择到循环安装解决
  • Flink内存管理实战:如何用堆外内存提升大数据处理性能(附配置参数详解)
  • 一、安装Redis(win11环境下)
  • MinIO 宣布彻底闭源后,RustFS “偷家”成功:二进制替换,一步完成平滑迁移!
  • 网络安全新手必看:Kill Chain攻击链的7个阶段详解与防御要点(2023最新版)
  • Carsim与Matlab/Simulink联合仿真:五次多项式实时规划在四车道直道场景的应用
  • 生成引擎优化GEO提升内容创作价值与用户体验协同发展的新路径
  • 2026.3 ~ 2026.4