Rocky Linux,AlmaLinux 编译安装 OpenResty

By | 最新修改:2025-12-20

前言

本文的目的

本文的主要目的是在Rocky Linux/AlmaLinux 下通过源代码编译安装 OpenResty,同时还随带着一些 Nginx 实用模块来作为动态或静态模块来安装,比如 Brotli 压缩算法模块、高级 Memcached 访问模块等等。

什么是 OpenResty

OpenResty 集成了 Nginx 和 Lua 语言,是名符其实的高性能 Web 服务器软件。

它能方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关,高性能地响应后端和前端的网络请求。

并且集成了大量用Lua语言编写的应用库、第三方模块以及大量的依赖项。

与 Nginx 的相似之处

Nginx 是一款高性能、易配置、占用资源少的模块化的服务器软件,并且它既是反向代理软件,也是HTTP Web服务器软件。

在平时常态的使用中, OpenResty 的基本功能与 Nginx 无异,比如可以反向代理,负载均衡、实现 Brotli 压缩等等。

并且,在一般情况下,两者编译安装所须的依赖项基本一致,就连编译前的条件配置都几乎相同。

更多

更多关于penResty的内容请查阅它的官网: https://openresty.org/

编译安装 OpenResty


完整编译过程

一、安装依赖

  1. 安装哪些依赖
    • OpenResty 的 HTTPS 功能要求系统要安装有 OpenSSL,而 HTTP/3 要求 v3.6+ 的 OpenSSL;
    • 为在服务器软件上对图像进行转换格式等处理操作,需要 libgd 和 libwep 的支持,因此要先编译 libwep 和 libgd,这部分已经在撰写本文的前面完成了相关教程的编写;

    • 为了使用 Brotli 压缩算法而依赖 ngx_brotli 源代码;

    • 还有就是 OpenResty 中 Memcached,FastCGI,以及操作 HTTP 标头等功能的编译要从 Github 克隆相关的源代码仓库;

    • 最后是下载 OpenResty 的源代码。

  2. 安装 libwebp

    WebP 编译之前需要先编译安装 libjpeg-turbo,这是比 libjpeg 更加优秀的 JPEG 图像编解码器。

    站内教程文章:

    1. Linux编译安装libjpeg-turbo
    2. Rocky Linux,AlmaLinux编译libwebp及Nginx自适应WebP

  3. 安装 libgd

    对于图像过滤模块 ngx_http_image_filter_module,它依赖于 libgd。

    所以在 OpenResty 编译之前,首先编译安装 libgd:

    Rocky Linux,AlmaLinux编译安装GD库(libgd)

  4. 其他依赖

    其他编译所需依赖就是一些通过系统软件源通过 dnf 安装的必要程序。

二、下载编译所需的源码

在网页 OpenResty 官方网站:https://openresty.org/cn/download.html 可找到其最新版的源代码压缩包。

三、配置源代码、编译和安装

  1. 配置源代码:
    1. 在配置源代码时添加上 --with-http_image_filter_module=dynamic 选项以处理图像,这里是动态加载图像处理模块;
    2. --with-http_v3_module: 带 HTTP/3;
    3. --with-openssl=../openssl 选项为了 HTTP/3 功能连带着 OpenSSL v3.6+ 一起编译;
    4. 指定 libgd 动态库与函数头文件源码目录路径:--with-ld-opt="-L/usr/local/libgd/lib -lgd"--with-cc-opt="-I/usr/local/libgd/include",因为 libgd 安装在路径 /usr/local/libgd/
    5. 以及以动态模块加载形式添加一些像“增强的Nginx Memcached模块” 这样的额外模块。
  2. 使用 gmakegmake install 两条命令分别进行构建、编译与链接,和执行安装、复制二进制文件等操作。

四、为程序运行创建用户和 SystemD 服务的配置文件

创建运行用户 nginx,OpenResty 将会使用该用户在文件系统读取和写入文件,因此网站目录通常都会将属主和属组设置为此用户。

创建 SystemD 服务配置文件对守护进程进行管理,包括停止、启动等操作都在此文件中定义。

五、创建必要目录和指定用户属主和属组

为必要的目录和文件进行创建、修改属主属组等操作。比如程序运行的 PID 文件要创建和设置属主。

六、指定程序运行的用户和进程 pid

要想程序正确地运行起来,还要对服务器软件进行一番配置。

比如在 /etc/nginx/nginx.conf 文件中修改 userpid 指令的值:

  1. 打开 user 指令的注释并將值修改为 nginx
  2. 打开 pid 的注释并修改为 /run/nginx.pid

  3. 如果有条件,將域名 server_name 指令的值改为绑定的域名。这样做的前提是服务器有公网 IP 地址,同时在互联网上注册有网站域名,并且将域名的 DNS 解析指向该公网 IP 地址。

  4. 或者,如果是在本地或本地虚拟机中编译的 OpenResty,需要在本地/宿主机的 hosts 文件把自定义域名指向服务器 IP。

    比如:

    127.0.0.1 test1.com
    192.168.1.102 test2.com
    

    test1.com 和 test2.com 就是指定服务器的域名,而 127.0.0.1 和 192.168.1.102 就是服务器的 IP 地址(请根据实际情况而定)。

七、安装防火墙及放开必要的端口

在自动化安装脚本中安装和启用了 FirewallD 防火墙,并且开放了 80、443 等端口。

关于 SSH 端口:

修改 FirewallD 的规则之前请务必关注一下 SSH 的端口配置(/etc/ssh/sshd_config),否则可能导致 SSH 连接时进不到服务器。

确保 SSH 的端口在 FirewallD 的允许列表中

另,若是 SELinux 在开启状态,需要禁用 SELinux,或者为 SSH 的端口设置 SELinux 规则。

firewall-cmd --add-port=[SSH端口]/tcp --permanent
# 永久生效
firewall-cmd --reload
# 查看尚已开放的端口
firewall-cmd --list-all

此外,如果你的服务器所在的云平台还有防火墙,那么你也必须配置这个防火墙,让它允许通过TCP 80 和 443,以及 UDP 443 端口进来。

八、启动 OpenResty 及开机启动

在自动化脚本中完成了以下的操作:

  1. 启动守护程序
  2. 设置随系统启动

刚刚安装好服务器软件,是不是想运行起来?然后小小地测试一下服务器是否通畅?

现时要访问的是 OpenResty 的缺省页面,可通过域名或者 IP 地址来访问。

只是现在还访问不了 443 端口,因为还未配置 HTTPS。


自动化脚本编译和安装 OpenResty

若是遇到 Github 资源无法访问的情况,请参考站内文章:

GitHub国内访问慢?5种加速方案解决克隆失败,提升下载速度

执行上述脚本:

# 传递任意参数以应用代理对 Github 资源进行加速
bash /tmp/installer.sh 123
rm -fv /tmp/installer.sh

如果脚本中访问 Github 的代理无效,请及时联系笔者(通过微信公众号或者电子邮箱)。


后记

安装依赖总结

本文以尽量细致的步骤描述 Rocky Linux/AlmaLinux 服务器操作系统通过源代码编译的方式安装 OpenResty 的全过程。安装完成的 OpenResty 拥有 HTTP/3,Br 压缩,Memcached 读写,HTTP 响应头移除和修改,并具备基本图像处理等功能。

HTTP 3

OpenResty 的最新版本已经原生地支持 HTTP/3,而 HTTP/3 要配置 SSL/TLS 证书,至于如何配置 TLS 证书,请参考其他资源。

这里推荐一个可以提供免费 SSL/TLS 证书的网站:https://freessl.cn/,此网站可以应用 acme.sh 命令自动化部署 HTTPS 证书。

支持 Brotli

此外,本文还让 OpenResty 支持了 Brotli 压缩,Brotli 是一种压缩效率高、效果好的压缩方式。

只有启用了 HTTPS 才能使用 Brotli 压缩。

结束语

本文的脚本在 Rocky Linux/AlmaLinux 9 和 10 下均测试通过。如果要在 RHEL 上面部署,需要修改一下上文的自动化安装脚本。

最后,感谢阅读!

欢迎访问本人的博客和关注微信公众号!

(本文完)


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com