手把手教你安装nginx并添加submodule(ubuntu系统)

发布时间 2023-12-04 16:50:48作者: 纯真丁一郎です

一. Nginx介绍

1.什么是Nginx

Nginx(engine x)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

2.主要特性

  • 高并发、高性能:Nginx能够支持高达50,000个并发连接数的响应。

  • 低内存占用:Nginx在运行时消耗较少内存。

  • 热部署:大多数Nginx模块支持热部署,使服务无缝重启。

  • 可扩展性:模块化设计,第三方模块丰富。

  • 高可靠性:主流采用主从热备的方式保证服务稳定性。

  • BSD许可证:Nginx使用更宽松的BSD许可证。

3. 应用场景

  1. 反向代理服务器:Nginx可以将请求转发到后端的应用服务器,常见的组合包括nginx+tomcat、nginx+nodejs等。通过反向代理可以实现负载均衡、安全加密。

  2. 负载均衡:通过Nginx upstream模块实现简单的负载均衡功能,较常见的是轮询和加权轮询方式,也支持hash、IP hash等复杂均衡算法。

  3. 高性能Web服务器:直接将Nginx作为静态资源的Web服务器,利用其处理高并发的能力,相比Apache等有明显优势。

  4. API服务:相比直接通过应用服务器提供API,通过Nginx反向代理可以实现限流、容错、安全、监控等功能。

  5. 邮件代理服务器:通过配置Nginx的mail模块实现IMAP/POP3/SMTP服务代理。

  6. 缓存服务器:利用Nginx提供的代理缓存功能,可以减轻应用服务器的压力,节约带宽。常见于代理静态资源和API缓存。

  7. 流媒体服务:Nginx可以实现视频点播服务,支持响应数据分段传输,并提供HTTP/TCP/UDP等多协议的流服务。

二. 安装Nginx

这里是安装 Nginx 的详细步骤翻译:

安装必备组件:

sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

导入 Nginx 官方签名密钥,以便 apt 可以验证软件包的真实性。获取密钥:

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

验证下载的文件中包含正确的密钥:

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

输出应包含完整指纹 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62并且输出如下:

pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <signing-key@nginx.com>

如果指纹不同,删除该文件。

然后设置稳定版本 Nginx 软件源:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

如果要主线版本可以调整为 mainline 源。

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Nginx官网提供了三个类型的版本:
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版

设置软件源优先级以优先使用 Nginx 提供的软件包。

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

更新软件源并安装 Nginx。

sudo apt update
sudo apt install nginx

三. 安装模组

  1. 查看nginx版本号,记录编译参数
nginx -V

输出:

nginx version: nginx/1.25.3
built by gcc 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
built with OpenSSL 3.2.0 23 Nov 2023
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_sub_module --with-http_ssl_module --add-module=/root/workspace/nginx/ngx_http_substitutions_filter_module --with-openssl=/root/workspace/openssl-3.2.0/
  1. 下载 nginx 源码和 subs-filter模块

然后下载对应版本的nginx,并解压

wget http://nginx.org/download/nginx-1.25.3.tar.gz
tar -xvzf nginx-1.25.3.tar.gz

下载subs-filter模块

git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
  1. 编译

首先cd nginx-1.25.3进入解压后的nginx的目录下面,执行:

./configure --add-module=/path/to/module

--add-module 指定到你clone下的 subs-filter模块的目录下就可以了,需要使用绝对路径

四. 常见错误及解决方法

缺少PCRE库

./configure: error: the HTTP rewrite module requires the PCRE library.
  1. 下载PCRE2,并解压
wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.gz
tar -xvzf pcre2-10.42.tar.gz
  1. cd pcre2-10.42进入pcre目录编译并安装
./configure --prefix=/usr/local 
make && make install

缺少openssl库

./configure: error: SSL modules require the OpenSSL library.
  1. 下载openssl源码
git clone git://git.openssl.org/openssl.git
  1. cd nginx-1.25.3进入解压后的nginx的目录下面,执行:
./configure --with-openssl=/path/to/module

--with-openssl指定到你clone下的openssl模块的目录下就可以了,需要使用绝对路径

五. 编译安装Nginx

cd nginx-1.25.3进入解压后的nginx的目录下面进行编译:

make

注意: 不用make install

测试一下编译后的nginx是否已经包含了subs-filter模块

./objs/nginx -t

六. 替换Nginx

首先停止原nginx服务

service nginx stop

下面进行替换

cp ./objs/nginx /usr/sbin/nginx

然后正常进行启动nginx 就可以了

service nginx start

这里可能会遇到报错:

nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)

提示没有找到文件,我们只要自行创建一个就行了:

mkdir -p /usr/local/nginx/logs/
touch /usr/local/nginx/logs/error.log

然后使用nginx -s reload 重启服务 不报错就表示重启成功了~

七. 检查安装情况

再次运行nginx -V来查看模块是否成功安装
可以使用格式化输出来更方便的查看:

2>&1 nginx -V | tr ' '  '\n'|grep "\--"
--prefix=/usr/local/nginx
--with-http_stub_status_module
--with-http_sub_module
--with-http_ssl_module
--add-module=/root/workspace/nginx/ngx_http_substitutions_filter_module
--with-openssl=/root/workspace/openssl-3.2.0/

返回结果显示我们添加的--add-module和--with-openssl都已经安装并指定到对应的目录了~