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

相关推荐
肠胃炎4 小时前
挂载方式部署项目
服务器·前端·nginx
曲幽8 小时前
FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了!
python·websocket·nginx·socket·fastapi·web·async·socketio
袁庭新11 小时前
M系列芯片Mac上通过Homebrew一键安装/卸载Nginx并上线项目全指南
运维·nginx·macos·袁庭新·袁庭新ai
Densen201412 小时前
发布blazor应用到Linux, 使用nginx作为WebSocket代理
linux·websocket·nginx
不是书本的小明12 小时前
Apache vs Nginx vs Tomcat 核心区别与优化
nginx·tomcat·apache
困惑阿三1 天前
客户消息及时反馈
nginx·node.js·飞书·企业微信
liurunlin8881 天前
httpslocalhostindex 配置的nginx,一刷新就报404了
运维·nginx
BullSmall1 天前
Nginx负载均衡会话保持配置指南
运维·nginx·负载均衡
你才是臭弟弟2 天前
Nginx部署前后端
运维·nginx