教你像个大佬一样从源码编译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...

相关推荐
阿标在干嘛19 小时前
Nginx一个配置错误,流量损失30%!这是我们的完整排查记录
运维·nginx
IT菜鸟程2 天前
Ubuntu 下 apt 版 Nginx 升级为源码编译版本完整操作指南(1.24.0 → 1.30.4 实战)
linux·nginx·ubuntu
sbjdhjd2 天前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache
NGINX开源社区2 天前
NGINX Gateway Fabric 2.6:F5 WAF for NGINX 集成 Gateway API
nginx·gateway·fabric
小白羊丨2 天前
HTTP/2 如何缓解 HTTP/1.1 阻塞;长连接对 Nginx 有什么影响?
网络协议·nginx·http
xixiaoyunya3 天前
Docker 容器化部署实战:从零搭建一套完整的 Nginx + Node.js + MySQL + Redis 项目环境
nginx·docker·node.js
SendTomo3 天前
【技术交流】从0到1构建一个汉字学习平台:汉字吧(hanzi8.com)的技术架构猜想
redis·mysql·nginx·php·个人开发
滨哥GPT4 天前
Codex新增文件上传后为什么小文件正常,大文件总失败?Multipart、Body Limit与Nginx限制排查
nginx·ai编程·文件上传·codex·multipart
come112344 天前
Nginx `location` 配置说明(后端开发版)
运维·nginx
PHP实战开发录5 天前
PHP文件上传成功为什么页面却找不到
开发语言·nginx·php·开发