教你像个大佬一样从源码编译Nginx实现自定义安装模块(2024)

简介

以二进制文件形式(或者apt)安装的Nginx能满足大部分的场景需求,但这样也造成可能安装了你不需要的模块或者又没有安装你需要的模块,那么可以通过从Nginx源码编译安装的方式,实现根据自己的需求来选择所要安装的Nginx模块。

Nginx官网有从源码安装的文档,只要你照着它的文档一步步的去做,那就肯定。。。会报错。🙉

那怎样才能完成编译安装呢,阅读完这篇文章你就懂了!👍

系统环境

本文以Ubuntu系统为例说明,其他的Linux发行版也能够参照操作。

安装依赖

  1. 检查系统中是否有gcc编译工具
sh 复制代码
gcc --version
  1. 如果没有的话,先安装gcc
sh 复制代码
sudo apt update
sudo apt install build-essential
  1. 安装PCRE
sh 复制代码
wget github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.gz
tar -zxf pcre2-10.42.tar.gz
cd pcre2-10.42
./configure
make
sudo make install
  1. 安装zlib
sh 复制代码
wget https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz
tar -zxf zlib-1.2.13.tar.gz
cd zlib-1.2.13
./configure
make
sudo make install

官网文档上zlib的下载链接是无效的,因为zlib在上个月(2024年1月)发布了新版,旧版链接被移除,但Nginx的文档没有更新。为了不引起可能的版本问题,这里我用zlib在GitHub上的旧版链接进行下载。

  1. 安装OpenSSL
sh 复制代码
wget http://www.openssl.org/source/openssl-1.1.1v.tar.gz
tar -zxf openssl-1.1.1v.tar.gz
cd openssl-1.1.1v
./config --prefix=/usr
make
sudo make install

在官网安装文档中,这里突然给了个Mac下的编译配置命令,也没有给任何注释,所以要修改为上面的命令才能安装。(注意:config是全小写的,而不是官网文档中的大写Configure)

下载源码

sh 复制代码
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0

你也可以从官网页面上下载源码,打开这个下载页面:

然后在Stable version下点击当前最新的稳定版nginx-1.24.0链接,不要去下面Source Code那栏中找,那地方找到的源码与这个源码的目录结构不同,所以安装方法也不同。

编译安装

  1. 安装配置

在这里就可以进行模块选择了。比如,我只要http、ssl以及tcp四层转发,那么用下面的命令进行安装配置:

sh 复制代码
./configure \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--with-pcre=../pcre2-10.42 \
--with-zlib=../zlib-1.2.13 \
--with-openssl=../openssl-1.1.1v \
--with-stream \
--with-stream_ssl_preread_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module

具体有哪些模块,可以打开这个链接查看,根据自己的需求选择安装。

  1. 编译源码
sh 复制代码
make
sudo make install
  1. 列出安装的模块
sh 复制代码
sudo /usr/local/nginx/nginx -V
  1. 启动Nginx
sh 复制代码
sudo /usr/local/nginx/nginx
  1. 停止Nginx
sh 复制代码
sudo /usr/local/nginx/nginx -s quit

OK,到这里就完成了Nginx的编译安装!👏

报错排除

  1. 编译报错:configure: error: no acceptable C compiler found in $PATH

缺少gcc编译环境,安装gcc编译工具:

sh 复制代码
sudo apt update
sudo apt install build-essential
  1. 下载zlib报错:ERROR 404: Not Found

zlib 1.2.13的下载地址为:github.com/madler/zlib...

  1. 安装OpenSSL报错:cc: error: unrecognized command-line option '-arch'

安装时的配置参数不正确,在Linux中的命令是:./config --prefix=/usr

  1. OpenSSL报错:error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

这是可能在编译安装完OpenSSL后,调用OpenSSL相关方法时报的错,解决方法:

sh 复制代码
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
sudo ldconfig

参考资料

docs.nginx.com/nginx/admin...

nginx.org/en/download...

nginx.org/en/docs/con...

stackoverflow.com/questions/4...

相关推荐
大G哥6 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
妍妍的宝贝6 小时前
k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载
nginx·微服务·kubernetes
叶北辰CHINA9 小时前
nginx反向代理,负载均衡,HTTP配置简述(说人话)
linux·运维·nginx·http·云原生·https·负载均衡
Lansonli11 小时前
云原生(四十八) | Nginx软件安装部署
nginx·云原生·ecs服务器
加油,旭杏17 小时前
【中间件学习】fastCG介绍和使用
学习·nginx·fastcgi
苹果醋320 小时前
大模型实战--FastChat一行代码实现部署和各个组件详解
java·运维·spring boot·mysql·nginx
tanxiaomi1 天前
vue 不是spa 单页面应用吗? 配置路由工作模式为history 后 ,为什么配置Nginx的 try_files 可以根据url 找到对应的文件?
前端·vue.js·nginx
twins35201 天前
配置Nginx以支持通过HTTPS回源到CDN
网络·nginx·https
astuv1 天前
在树莓派上部署开源监控系统 ZoneMinder
linux·nginx·树莓派·监控·摄像头·zoneminder·apache2
加油,旭杏2 天前
【中间件学习】Nginx快速入门(为了配置一个项目)
学习·nginx·中间件