MacOS编译NGINX1.17

2023-11-23 15:40
文章标签 编译 macos nginx1.17

本文主要是介绍MacOS编译NGINX1.17,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

使用Mac的开发者大多数的时候通过 brew 命令安装各类软件,比如 PHP、Python、Nodejs,Nginx 也不例外。

默认情况下Nginx安装在/usr/local/Cellar/nginx,通过brew link nginx加软连接到/usr/local/bin/nginx,虽然这样完全满足开发且符合 Mac 软件的管理,但是却不方便移植(比如想给不懂开发的用户一键部署部署的应用包,做私有化部署的同学应该对此不陌生)。

从源码编译NGINX程序比安装预编译的安装包要灵活很多,可以添加特定的模块(来自NGINX官方或者第三方的,比如给 Fastdfs 提供 HTTP 访问文件能力的 fastdfs-nginx 模块),当然自己编译源码拉取的可以是已修复 bug 和新增特性的最新分支。

编译

依赖

  • PCRE——支持正则表达式。 是 Nginx 的核心和重写模块的所需依赖库。
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.bz2
tar zxf pcre-8.43.tar.bz2
  • zlib——支持标头压缩。是 Nginx 的 Gzip 模块所需。
wget http://zlib.net/zlib-1.2.11.tar.gz
tar zxf zlib-1.2.11.tar.gz
  • OpenSSL——支持HTTPS协议。是Nginx的SSL模块和其他模块所需。
wget http://www.openssl.org/source/openssl-1.1.1c.tar.gz
tar zxf openssl-1.1.1c.tar.gz

构建NGINX

下载源

wget https://nginx.org/download/nginx-1.17.4.tar.gz
tar zxf nginx-1.17.4.tar.gz 
cd nginx-1.17.4

配置构建选项

NGINX编译配置选项由./configure 设置各种参数,包括源文件和配置文件路径、编译选项、链接处理方法以及模块列表。通过./configure可以创建 Makefile 编译代码和安装 Nginx。

./configure \
--user=nginx \
--group=nginx \
--prefix=./nginx \
--sbin-path=nginx \
--conf-path=nginx.conf \
--pid-path=nginx.pid \
--with-http_ssl_module \
--with-pcre=../pcre-8.43 \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1c

  • --prefix=path - 定义一个将保留服务器文件的目录。同样的目录也将用于由 configure 设置的所有相对路径(除了库源的路径)和nginx.conf 配置文件中。它默认设置为/usr/local/nginx目录。
  • --sbin-path=path - 设置 nginx 可执行文件的名称。该名称仅在安装期间使用。默认情况下,该文件被命名为${prefix}/sbin/nginx
  • --conf-path=path - 设置 nginx.conf 配置文件的名称。如果需要,通过在命令行参数 -c 文件中指定 nginx的配置文件,nginx 始终可以使用不同的配置文件启动。默认情况下,该文件名为${prefix}/conf/nginx.conf
  • --pid-path=path - 设置将存储主进程的进程ID的 nginx.pid 文件的名称。安装完成后,可以使用 pid 指令始终在 nginx.conf 配置文件中更改文件名。默认情况下,该文件名为 ${prefix}/logs/nginx.pid
  • --error-log-path=path - 设置主要错误,警告和诊断文件的名称。安装完成后,可以使用error_log指令始终在 nginx.conf 配置文件中更改文件名。默认情况下,该文件名为`${prefix}/logs/error.log`。
  • --http-log-path=path - 设置HTTP服务器的主要请求日志文件的名称。安装完成后,可以使用 access_log 指令始终在 nginx.conf 配置文件中更改文件名。默认情况下,该文件被命名为`${prefix}/logs/access.log`。
  • --build=name - 设置一个可选的 nginx 构建名称。
  • --user=name - 设置其凭据将被工作进程使用的非特权用户的名称。 安装完成后,可以使用 user 指令始终在 nginx.conf 配置文件中更改该名称。默认的用户名是 nobody
  • --group=name - 设置工作进程将使用其凭据的组的名称。安装完成后,可以使用 user 指令始终在 nginx.conf 配置文件中更改该名称。 默认情况下,组名称设置为非特权用户的名称。
  • `--with-select_module
    --without-select_module `- 启用或禁用构建允许 Nginx 使用`select()`方法工作的模块。如果平台可能不支持更合适的方法(例如`kqueue`,`epoll`或`/dev/poll`),则会自动构建此模块。
  • --with-poll_module --without-poll_module - 启用或禁用构建允许 Nginx 使用该poll()方法工作的模块。如果平台似乎不支持更合适的方法(例如kqueueepoll/dev/poll),则会自动构建此模块。
  • --without-http_gzip_module - 禁用构建压缩HTTP服务器响应的模块。需要zlib库来构建和运行此模块。
  • --without-http_rewrite_module - 禁止构建允许HTTP服务器重定向请求并更改请求URI的模块。PCRE库需要构建和运行该模块。
  • --without-http_proxy_module - 禁用构建HTTP服务器代理模块。
  • --with-http_ssl_module - 可以构建一个将HTTPS协议支持添加到HTTP服务器的模块。该模块不是默认生成的。OpenSSL库是构建和运行该模块所必需的。
  • --with-pcre=path - 设置PCRE库源的路径。发行版(版本4.4 - 8.41)需要从PCRE网站下载并提取。该库是location指令和ngx_http_rewrite_module模块支持正则表达式所必需的。
  • --with-pcre-jit - 用“即时编译”支持(1.1.12,pcre_jit指令)构建PCRE库。
  • --with-zlib=path - 设置zlib库源的路径。库分发(版本1.1.3 - 1.2.11)需要从zlib站点下载并解压缩。该库是ngx_http_gzip_module模块所必需的。
  • --with-cc-opt=parameters - 设置将被添加到CFLAGS变量的附加参数。在FreeBSD下使用系统PCRE库时,--with-cc-opt="-I /usr/local/include"应该指定。如果select()需要增加支持的文件数量,也可以在这里指定如下:--with-cc-opt="-D FD_SETSIZE=2048"。
  • --with-ld-opt=parameters - 设置将在链接期间使用的其他参数。在FreeBSD下使用系统PCRE库时,--with-ld-opt="-L /usr/local/lib"应该指定。

编译安装

make && make install

最后看到有test相关的数据输出则表示编译成功:

test -d './nginx' || mkdir -p './nginx'
test -d './nginx' \|| mkdir -p './nginx'
test ! -f './nginx/nginx' \|| mv './nginx/nginx' \'./nginx/nginx.old'
cp objs/nginx './nginx/nginx'
test -d './nginx' \|| mkdir -p './nginx'
cp conf/koi-win './nginx'
cp conf/koi-utf './nginx'
cp conf/win-utf './nginx'
test -f './nginx/mime.types' \|| cp conf/mime.types './nginx'
cp conf/mime.types './nginx/mime.types.default'
test -f './nginx/fastcgi_params' \|| cp conf/fastcgi_params './nginx'
cp conf/fastcgi_params \'./nginx/fastcgi_params.default'
test -f './nginx/fastcgi.conf' \|| cp conf/fastcgi.conf './nginx'
cp conf/fastcgi.conf './nginx/fastcgi.conf.default'
test -f './nginx/uwsgi_params' \|| cp conf/uwsgi_params './nginx'
cp conf/uwsgi_params \'./nginx/uwsgi_params.default'
test -f './nginx/scgi_params' \|| cp conf/scgi_params './nginx'
cp conf/scgi_params \'./nginx/scgi_params.default'
test -f './nginx/nginx.conf' \|| cp conf/nginx.conf './nginx/nginx.conf'
cp conf/nginx.conf './nginx/nginx.conf.default'
test -d './nginx' \|| mkdir -p './nginx'
test -d './nginx/logs' \|| mkdir -p './nginx/logs'
test -d './nginx/html' \|| cp -R html './nginx'
test -d './nginx/logs' \|| mkdir -p './nginx/logs'

错误或注意事项

  • make 阶段缺少 pcre 错误

make[1]: *** [/usr/local/Cellar/pcre/8.43/lib//Makefile] Error 127

Nginx 高版本的需要使用 pcre 原文件路径,通过--with-pcre=PATH指定 pcre 的源路径即可。

  • --prefix指定的是整个编译后输出文件的位置的前缀

如果其他配置项不指定或者其他配置项是相对路径,在编译路径会加上prefix的配置路径。

Installing NGINX Open Source

Building nginx from Sources

该文首发《虚怀若谷》个人博客,转载前请务必署名,转载请标明出处。

古之善为道者,微妙玄通,深不可识。夫唯不可识,故强为之容:

豫兮若冬涉川,犹兮若畏四邻,俨兮其若客,涣兮若冰之释,敦兮其若朴,旷兮其若谷,混兮其若浊。

孰能浊以静之徐清?孰能安以动之徐生?

保此道不欲盈。夫唯不盈,故能敝而新成。

请关注我的微信公众号:下雨就像弹钢琴,Thanks♪(・ω・)ノ微信二维码

这篇关于MacOS编译NGINX1.17的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418963

相关文章

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

mac中资源库在哪? macOS资源库文件夹详解

《mac中资源库在哪?macOS资源库文件夹详解》经常使用Mac电脑的用户会发现,找不到Mac电脑的资源库,我们怎么打开资源库并使用呢?下面我们就来看看macOS资源库文件夹详解... 在 MACOS 系统中,「资源库」文件夹是用来存放操作系统和 App 设置的核心位置。虽然平时我们很少直接跟它打交道,但了

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO