手把手教你安装nginx并添加submodule(ubuntu系统)
一. Nginx介绍
1.什么是Nginx
Nginx(engine x)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
2.主要特性
-
高并发、高性能:Nginx能够支持高达50,000个并发连接数的响应。
-
低内存占用:Nginx在运行时消耗较少内存。
-
热部署:大多数Nginx模块支持热部署,使服务无缝重启。
-
可扩展性:模块化设计,第三方模块丰富。
-
高可靠性:主流采用主从热备的方式保证服务稳定性。
-
BSD许可证:Nginx使用更宽松的BSD许可证。
3. 应用场景
-
反向代理服务器:Nginx可以将请求转发到后端的应用服务器,常见的组合包括nginx+tomcat、nginx+nodejs等。通过反向代理可以实现负载均衡、安全加密。
-
负载均衡:通过Nginx upstream模块实现简单的负载均衡功能,较常见的是轮询和加权轮询方式,也支持hash、IP hash等复杂均衡算法。
-
高性能Web服务器:直接将Nginx作为静态资源的Web服务器,利用其处理高并发的能力,相比Apache等有明显优势。
-
API服务:相比直接通过应用服务器提供API,通过Nginx反向代理可以实现限流、容错、安全、监控等功能。
-
邮件代理服务器:通过配置Nginx的mail模块实现IMAP/POP3/SMTP服务代理。
-
缓存服务器:利用Nginx提供的代理缓存功能,可以减轻应用服务器的压力,节约带宽。常见于代理静态资源和API缓存。
-
流媒体服务: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
三. 安装模组
- 查看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/
- 下载 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
- 编译
首先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.
- 下载PCRE2,并解压
wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.gz
tar -xvzf pcre2-10.42.tar.gz
cd pcre2-10.42
进入pcre目录编译并安装
./configure --prefix=/usr/local
make && make install
缺少openssl库
./configure: error: SSL modules require the OpenSSL library.
- 下载openssl源码
git clone git://git.openssl.org/openssl.git
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都已经安装并指定到对应的目录了~