Ubuntu之源码编译安装nginx

参考:Ubuntu之源码编译安装nginx_ubuntu编译安装nginx-CSDN博客

1.下载源码后进入源码目录,如下:

cd /home/jq/wf/nginx-1.26.1

2.下载相应依赖库:

apt-get install libpcre3-dev

apt-get install openssl libssl-dev

apt-get install zlib1g-dev

3.运行配置命令:(--prefix指定make install 后的目录,也就是nginx生成目录)

./configure --with-http_ssl_module --with-debug --prefix=/home/jq/wf/nginx-1.26.1/bin

打印如下:

...

checking for OpenSSL library ... found

checking for zlib library ... found

creating objs/Makefile

Configuration summary

  • using system PCRE2 library

  • using system OpenSSL library

  • using system zlib library

nginx path prefix: "/"

nginx binary file: "//sbin/nginx"

nginx modules path: "//modules"

nginx configuration prefix: "//conf"

nginx configuration file: "//conf/nginx.conf"

nginx pid file: "//logs/nginx.pid"

nginx error log file: "//logs/error.log"

nginx http access log file: "//logs/access.log"

nginx http client request body temporary files: "client_body_temp"

nginx http proxy temporary files: "proxy_temp"

nginx http fastcgi temporary files: "fastcgi_temp"

nginx http uwsgi temporary files: "uwsgi_temp"

nginx http scgi temporary files: "scgi_temp"

4.运行make命令: make

打印如下:

...

objs/src/http/modules/ngx_http_upstream_zone_module.o \

objs/ngx_modules.o \

-ldl -lpthread -lcrypt -lpcre2-8 -lssl -lcrypto -ldl -lpthread -lz \

-Wl,-E

sed -e "s|%%PREFIX%%|/home/jq/wf/nginx-1.26.1/bin|" \

-e "s|%%PID_PATH%%|/home/jq/wf/nginx-1.26.1/bin/logs/nginx.pid|" \

-e "s|%%CONF_PATH%%|/home/jq/wf/nginx-1.26.1/bin/conf/nginx.conf|" \

-e "s|%%ERROR_LOG_PATH%%|/home/jq/wf/nginx-1.26.1/bin/logs/error.log|" \

< man/nginx.8 > objs/nginx.8

make1: Leaving directory '/home/jq/wf/nginx-1.26.1'

sed后面的路径那里就是编译出来的目录

5.运行make install 安装命令: make install

到/home/jq/wf/nginx-1.26.1目录下,发现生成了bin文件夹,再进入bin文件夹看到如下:

进入sbin目录,就是生成的nginx文件

输入: ./nginx,运行nginx后,输入ps aux | grep 'nginx',可以看到已经有nginx进程

在浏览器中输入http://127.0.0.1/

6.如果有自定义的handler和自定义的filter,则需要在源码中找个地方放置handler和filter模块,比如在源码的根目录下的objs下,创建一个目录,用于放置这2个模块代码

additon_filter目录下是这样:

config里面的配置文件内容:

ngx_addon_name=ngx_http_encrypt_filter_module

HTTP_AUX_FILTER_MODULES="$HTTP_AUX_FILTER_MODULES ngx_http_encrypt_filter_module"

NGX_ADDON_SRCS="NGX_ADDON_SRCS ngx_addon_dir/ngx_http_encrypt_filter_module.c"

addition_module下的目录是这样:

config里面的内容:

ngx_addon_name=ngx_http_encrypt_module

HTTP_MODULES="$HTTP_MODULES ngx_http_encrypt_module"

NGX_ADDON_SRCS="NGX_ADDON_SRCS ngx_addon_dir/ngx_http_encrypt_module.c"

然后再在编译时的./configure命令中添加项 --add-module,如下:

./configure --with-http_ssl_module --with-debug --prefix=/home/jq/wf/nginx-1.26.1/bin \

--add-module="objs/addtion_module/addition_filter objs/addtion_module/addition_module"

就可以运行以上配置命令了。

7.如果还有自己定义的.h和.c文件,如需要用到cjson库的cJson.h和cJson.c,还有自定义的.h和.c文件,如test.h和test.c,需要将cJson.h和cJson.c放到源码的core目录下,如果test.h/.c里面没有用到nginx其他模块的api,也可以放到core目录下,如果用到了其他模块,比如nginx http的api,比如我的就用到了#include <ngx_http.h>,那么就将test.h/.c放到http目录下,然后修改源码的auto目录的sources,将cjson.h 文件加到CORE_DEPS项,将cjson.c文件添加到CORE_SRCS项;修改auto/modules文件将test.h添加到http的ngx_module_deps项, test.c添加到ngx_module_srcs项,即ngx_module_type=HTTP下面的部分里面添加。如下的modules文件位置:

修改完后,就可以运行./confiure命令和make,make install命令了。

相关推荐
IT菜鸟程36 分钟前
Ubuntu 下 apt 版 Nginx 升级为源码编译版本完整操作指南(1.24.0 → 1.30.4 实战)
linux·nginx·ubuntu
新时代牛马42 分钟前
Linux 磁盘管理:分区、文件系统、挂载与扩容
linux·运维·服务器
weixin_402486341 小时前
VS Code Codex/Claude Extension 无法安装 / 无法正常打开
linux·服务器·vscode
大树881 小时前
液冷系统的真正瓶颈,藏在那层不到1毫米的材料里
大数据·运维·服务器·人工智能·ai
深念Y1 小时前
iOS模拟器在无Metal的NVIDIA显卡环境下的可行性研究报告
服务器·ios·unix·pve·freebsd
网硕互联的小客服2 小时前
没有公网IP,如何让外网访问内网服务器?
运维·服务器
布裘2 小时前
【银河麒麟】服务器系统开机黑屏故障排查与修复
linux·运维·服务器·银河麒麟·无法启动
Zenova EdgeOS2 小时前
Linux iotop:工业边缘 I/O 高级分析实战
linux·运维·服务器
新时代牛马3 小时前
Linux 日志管理:journald、rsyslog 与 logrotate
linux·运维·服务器
sbjdhjd3 小时前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache