目录

从 Nginx 迁移到 Openresty

从 Nginx 迁移到 Openresty

什么是OpenResty? 有什么作用?

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

简而言之OpenResty就是整合了Nginx和lua的框架, 并内置了lua;

为什么要换成 Openresty

  • Lua 脚本支持:

    OpenResty 内置了 LuaJIT(Lua 的即时编译器),允许用户直接在 Nginx 配置文件中使用 Lua 脚本。这使得可以实现更复杂的业务逻辑,而无需依赖外部脚本。Lua 脚本的灵活性和简洁性有助于快速开发 Web 应用和服务,尤其是在需要动态处理 HTTP 请求和响应时。

  • 更高的开发效率:

    Lua 脚本相对容易学习和使用,可以快速构建各种功能,减少开发时间。

  • Web 应用开发框架:

    它提供了许多内置的库和模块,可帮助开发者构建完整的 Web 应用程序,而不仅仅是作为一个 Web 服务器。

  • 流式处理:

    支持流式处理 HTTP 请求和响应,能够处理大文件上传和下载,以及其他需要流式数据处理的场景。

  • 性能优化:

    虽然引入了 LuaJIT 可能会带来一些性能开销,但在设计时已考虑性能优化,在许多场景下,特别是业务逻辑复杂的情况下,性能损失是可控的,并且在某些情况下可能会比传统方式更高效。

  • 扩展性:

    基于 Nginx,继承了其优秀的模块化设计,同时提供了更多扩展可能性,社区也贡献了丰富的第三方模块。

  • API 网关能力:

    可以作为 API 网关使用,例如著名的 Kong API 网关就是基于 OpenResty 构建的,能够提供 API 管理、请求代理等功能。

  • 易于维护:

    配置和使用相对统一,可减少维护不同语言编写的脚本和服务的复杂性,使整个系统更易于管理。

然而,是否选择将 Nginx 换成 OpenResty 应根据具体的项目需求和场景来确定。如果项目需要更高级的 Web 应用开发能力、复杂的业务逻辑处理,或者对 API 网关等功能有需求,那么 OpenResty 可能是更好的选择;如果项目对性能要求极高,且业务逻辑相对简单,Nginx 可能已经能够满足需求。在做出决策之前,建议对两者进行详细的评估和测试。

替换成 Openresty

先备份 nginx 配置文件

1
nginx -V

查找“ –conf-path=/etc/nginx/nginx.conf” ,记住配置文件的目录

1
2
3
mkdir ~/nginx-conf-bak

sudo cp -R /etc/nginx/* ~/nginx-conf-bak 

先卸载 nginx

1
2
3
sudo systemctl stop nginx
sudo systemctl disable nginx
sudo kill -9 $(ps aux | grep '[n]ginx' | awk '{print $2}') && sudo   netstat -antp|grep nginx

安装 openresty

安装前置条件

1
sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates lsb-release

import our GPG key:

查看 ubunt 版本

1
2
> cat /etc/os-release |grep VERSION_ID
> VERSION_ID="20.04"

For ubuntu 16 ~ 20

1
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -

For ubuntu 22

1
wget -O - https://openresty.org/package/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/openresty.gpg

添加 official APT repository.

  • For x86_64 or amd64 systems:

    • For ubuntu 16 ~ 20
1
2
echo "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main" \
 | sudo tee /etc/apt/sources.list.d/openresty.list
  • For ubuntu 22 or above
1
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/package/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/openresty.list > /dev/null
  • And for arm64 or aarch64 systems:

    • For ubuntu 16 ~ 20
1
2
echo "deb http://openresty.org/package/arm64/ubuntu $(lsb_release -sc) main" \
 | sudo tee /etc/apt/sources.list.d/openresty.list
  • For ubuntu 22 or above
1
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/package/arm64/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/openresty.list > /dev/null

update the APT index:

1
sudo apt-get update

安装 openresty

1
2
3
sudo apt-get -y install openresty
sudo systemctl enable openresty
sudo systemctl start openresty

启动 openresty

恢复 nginx 配置

1
2
3
sudo mkdir /etc/openresty/site-enabled/
sudo cp ~/nginx-conf-bak/site-enabled/* /etc/openresty/site-enabled/
 

修改 nginx.conf

1
sudo vi /etc/openresty/nginx.conf

在 http {} 内增加以下:

1
include /etc/openresty/sites-enabled/*;

启动 openresty

1
2
sudo systemctl start openresty
sudo systemctl enable openresty