写点什么

openresty 源码编译

发布于: 2021 年 04 月 07 日

源码下载地址:http://openresty.org/cn/download.html

详细安装步骤:http://openresty.org/cn/installation.html

以下为 centos7 上进行源码编译与安装

1.安装依赖:

sudo yum install pcre-devel openssl-devel curl gcc

各依赖库均为最新版本:pcre-devel 版本 8.32,openssl-devel 版本 1.0.2k,curl 版本 7.29.0,gcc 版本 4.8.5

2.下载源码:

wget https://openresty.org/download/openresty-1.19.3.1.tar.gz

这里挑选的是 1.19.3.1 版本,该版本 nginx 内核升级为 1.19.3

3.解压源码压缩包并进入解压后目录:

tar -zxvf openresty-1.19.3.1.tar.gz && cd openresty-1.19.3.1

4.进行配置:

./configure

默认的配置参数为:--prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.1 --add-module=../echo-nginx-module-0.62 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.32 --add-module=../ngx_lua-0.10.19 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.9 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_ssl_module

注:如果是在 mac 上执行./configure 可能会报 OpenSSL 相关的错,

error: SSL modules require the OpenSSL library.

解决方法:将 openssl 源码下载至本地(推荐版本 openssl-1.1.1j),执行./configure 时指定 openssl 源码路径:

./configure --with-openssl={your_openssl_local_dir}/openssl-1.1.1j

此时应该不会再报错

完整配置选项如下所示:

--prefix=PATH

设置安装路径 (默认为 /usr/local/openresty)

--with-debug

启用调试日志

--with-no-pool-patch

启用无池补丁调试内存问题 (nginx 的内存池可能会干扰 nginx 发现内存问题的第一现场,所以可以考虑在构造 openresty 时禁用 nginx 的内存池)

-jN

构建 LuaJIT2.1 时将该参数传递过去

--without-http_echo_module

禁用 ngx_http_echo_module (nginx 的 echo 模块可以在 nginx 的 url 访问中通过 echo 命令输出字符到用户的浏览器,一般用来调试输出信息,检测 nginx 的可访问性、配置正确性。)

--without-http_xss_module

禁用 ngx_http_xss_module 跨站点脚本支持

--without-http_coolkit_module

禁用 ngx_http_coolkit_module (ngx_http_coolkit_module 是一个小而有用的 nginx 插件模块集合)

--without-http_set_misc_module

禁用 ngx_http_set_misc_module (ngx_http_set_misc_module 模块是标准的 HttpRewriteModule 指令的扩展,提供更多的功能,如 URI 转义与非转义、JSON 引述、Hexadecimal/MD5/SHA1/Base32/Base64 编码与解码、随机数等等。)

--without-http_form_input_module

禁用 ngx_http_form_input_module (ngx_http_form_input_module 是 Openresty 中一个用于处理 HTTP 请求的 POST 以及 PUT 方法,在协议头 Content-Type 是 application/x-www-form-urlencoded 的情况下,解析请求实体内容并按 nginx 变量存储的模块。)

--without-http_encrypted_session_module

禁用 ngx_http_encrypted_session_module (ngx_http_encrypted_session_module 是一个加密解密 nginx 变量值的模块,此模块提供了基于 AES-256 与 Mac 的变量加密和解密支持,此模块通常与 ngx_set_misc 模块和标准 rewrite 模块的指令一起使用,此模块可用于实现简单的用户登录和 ACL。)

--without-http_srcache_module

禁用 ngx_http_srcache_module (此模块为任意 nginx 位置提供了一个透明缓存层,为 location 增加了透明的基于 subrequest 的缓存层(类似于使用 upstream 或者甚至提供静态磁盘文件的缓存层)。)

--without-http_lua_module

禁用 ngx_http_lua_module

--without-http_lua_upstream_module

禁用 ngx_http_lua_upstream_module (ngx_http_lua_upstream_module 是 openresty 的负载均衡模块)

--without-http_headers_more_module

禁用 ngx_http_headers_more_module (ngx_http_headers_more_module 是 nginx 定制 header 返回信息模块,用于添加、设置和清除输入和输出的头信息。nginx 源码没有包含该模块,需要另行添加。该模块是 ngx_http_headers_module 模块的增强版,提供了更多的实用工具,比如复位或清除内置头信息,如 Content-Type, Content-Length, 和 Server。可以允许你使用-s 选项指定 HTTP 状态码,使用-t 选项指定内容类型,通过 more_set_headers 和 more_clear_headers 指令来修改输出头信息。)

--without-http_array_var_module

禁用 ngx_http_array_var_module(此模块为 nginx.conf 提供了数组类型的 nginx 变量。)

--without-http_memc_module

禁用 ngx_http_memc_module (memc 模块扩展了 Nginx 标准的 memcache 模块,增加了 set、add、delete 等 memcache 命令)

--without-http_redis2_module

禁用 ngx_http_redis2_module (redis2-nginx-module 是一个支持 Redis 2.0 协议的 Nginx upstream 模块,它可以让 Nginx 以非阻塞方式直接防问远方的 Redis 服务,同时支持 TCP 协议和 Unix Domain Socket 模式,并且可以启用强大的 Redis 连接池功能。)

--without-http_redis_module

禁用 ngx_http_redis_module (此模块是一个简单的提供 redis 缓存的模块,目前仅提供 select 和 get 方法。)

--without-http_rds_json_module

禁用 ngx_http_rds_json_module (此模块用来做数据格式转换)

--without-http_rds_csv_module

禁用 ngx_http_rds_csv_module (此模块用来做数据格式转换)

--without-stream_lua_module

禁用 ngx_stream_lua_module(configure 文件中未对此选项做处理,应该可忽略)

--without-ngx_devel_kit_module

禁用 ngx_devel_kit_module (Nginx 的开发套件)

--without-stream

禁用 TCP/UDP 代理模块

--without-http_ssl_module

禁用 ngx_http_ssl_module (该模块使 Nginx 支持 SSL 协议,提供 HTTPS 服务。该模块的安装依赖于 OpenSSL。)

--without-stream_ssl_module

禁用 ngx_stream_ssl_module(该模块提供了一种用于流代理服务器与 SSL / TLS 协议工作必要的支持)

--with-http_iconv_module

启用 ngx_http_iconv_module (此模块使用 libiconv 来转换不同编码字符,依赖于 libiconv。)

--with-http_drizzle_module

启用 ngx_http_drizzle_module (此模块使 NGINX 直接与 MySQL 或 Drizzle(一个精简版的 MySQL 分支)数据库服务器通信)

--with-http_postgres_module

启用 ngx_http_postgres_module (此模块允许 NGINX 直接与 PostgreSQL 数据库通信)

--without-lua_cjson

禁用 lua-cjson library (Lua CJSON 是一个 Lua c 模块,提供快速的 JSON 解析和 Lua 的编码支持)

--without-lua_tablepool

禁用基于 LuaJIT 的 Lua 表格资源回收池支持库(会导致 lua-resty-shell 同时被禁用)

--without-lua_redis_parser

禁用 lua-redis-parser library (lua-redis 解析器库实现了一个简单且快速的 redis 原始响应解析器,它构造相应的 lua 数据结构,以及一个构造 redis raw 请求的函数。)

--without-lua_rds_parser

禁用 lua-rds-parser library (这个 Lua 库可以用于将 Drizzle Nginx 模块和 Postgres Nginx 模块生成的 Resty-DBD-Stream 格式的数据解析为 Lua 数据结构。在过去,我们必须使用 JSON 作为中间数据格式,这在内存和 CPU 时间方面是相当低效的。为了最大化速度和最小化内存占用,这个库以纯 C 语言实现。默认情况下启用此库。)

--without-lua_resty_dns

禁用 lua-resty-dns library (非阻塞 DNS(域名系统)解析器的 Lua Nginx 模块,基于 cosocket API。)

--without-lua_resty_memcached

禁用 lua-resty-memcached library (Memcached 客户端驱动程序模块,基于 cosocket API 的 Lua Nginx 模块。)

--without-lua_resty_redis

禁用 lua-resty-redis library (Lua Redis 客户端驱动程序,基于 cosocket API 的 Lua Nginx 模块。)

--without-lua_resty_mysql

禁用 lua-resty-mysql library (Lua MySQL 客户端驱动程序,基于 cosocket API 的 Lua Nginx 模块。)

--without-lua_resty_upload

禁用 lua-resty-upload library (基于 Lua Nginx 模块的 cosocket API 用于 HTTP 文件上传流阅读器和分析器。)

--without-lua_resty_upstream_healthcheck

禁用 lua-resty-upstream-healthcheck library (此模块是纯 Lua 的 Nginx 上游服务器健康检查器。)

--without-lua_resty_string

禁用 lua-resty-string library (一个 Lua 库,为 Lua Nginx 模块提供字符串实用程序和通用哈希函数。)

-without-lua_resty_websocket

禁用 lua-resty-websocket library (这个 Lua 库实现了一个非阻塞 WebSocket 服务器和基于 Lua Nginx 模块的 cosocket API 的非阻塞 WebSocket 客户端。)

--without-lua_resty_limit_traffic

禁用不编译 lua-resty-limit-traffic 支持库(该库实现 Lua 限流)

--without-lua_resty_lock

禁用 lua-resty-lock library (这个 Lua 库实现了一个基于 Lua Nginx 模块的共享内存字典的简单非阻塞互斥锁 API。 主要用于消除“dog-pile effects”。dog-pile effect 指当网页缓存失效同时遇到大量请求,后端应用服务请求建立缓存,导致服务器卡顿甚至系统宕机的现象。)

--without-lua_resty_lrucache

禁用 lua-resty-lrucache library (实现 OpenResty 的 Lua-land LRU 缓存。)

--without-lua_resty_signal

禁用 lua-resty-signal 支持库,该支持库用于向 UNIX 进程发送信号(会导致 lua-resty-shell 同时被禁用)

without-lua_resty_shell

禁用 lua-resty-shell 库,该库可以实现通过 Lua 调用 shell 脚本

--without-lua_resty_core

禁用 lua-resty-core library (使用 LuaJIT FFI 实现 Lua Nginx 模块提供的 Lua API。)

--with-luajit=DIR

使用指定的 DIR 安装 LuaJIT 2.1

--with-luajit-xcflags=FLAGS

为 LuaJIT 2.1 指定额外的 C 编译器标志

--with-luajit-ldflags=FLAGS

为 LuaJIT 2.1 指定额外的 C 链接器标志

--without-luajit-lua52

禁用基于 Lua 5.2 的 LuaJIT 扩展解释器

--without-luajit-gc64

关闭 LuaJIT GC64 模式(该模式在 x86_64 机器上默认打开,该模式将 LuaJIT 垃圾回收器能管理的内存从 2G 扩展到最大 128T)

--with-libdrizzle=DIR

指定 libdrizzle 1.0(或 drizzle)安装路径

--with-libpq=DIR

指定 libpq(或 postgresql)安装路径

--with-pg_config=PATH

指定 pg_config 实用程序的路径

--sbin-path=PATH

设置可执行文件放置路径

--modules-path=PATH

设置模块存放路径

--conf-path=PATH

设置 nginx.conf 存放路径

--error-log-path=PATH

设置 error.log 存放路径

--pid-path=PATH

设置 nginx.pid 存放路径

--lock-path=PATH

设置 nginx.lock 存放路径

--user=USER

为工作进程设置非特权用户

--group=GROUP

为工作进程设置非特权组

--build=NAME

设置可选的 nginx 构建器

--builddir=DIR

设置构建目录

--with-select_module

使用 select module 处理事件驱动

--without-select_module

禁用 select module

--with-poll_module

使用 poll module 处理事件驱动

--without-poll_module

禁用 poll module

--with-threads

启用线程池支持

--with-file-aio

启用文件异步 IO 支持

--with-http_ssl_module

启用 ngx_http_ssl_module(默认不启用)

--with-http_v2_module

启用 ngx_http_v2_module

--with-http_realip_module

启用 ngx_http_realip_module(该模块可以从客户端请求里的 header 信息(如 X-Real-IP 或者 X-Forwared-For)中获取真正的客户端 IP 地址)

--with-http_addition_module

启用 ngx_http_addition_module(该模块可以在返回客户端的 HTTP 包体头部或者尾部增加内容)

--with-http_xslt_module

启用 ngx_http_xslt_module(这个模块可以使 XML 格式的数据在发给客户端前加入 XSL 渲染,此模块依赖于 libxml2 和 libxslt 库。)

--with-http_xslt_module=dynamic

启用动态 ngx_http_xslt_module

--with-http_image_filter_module

启用 ngx_http_image_filter_module(此模块将符合配置的图片实时压缩为指定大小(width*height)的缩略图再发送给用户,目前支持 JPEG、PNG、GIF 格式。此模块依赖于开源的 libgd 库。)

--with-http_image_filter_module=dynamic

启用动态 ngx_http_image_filter_module

--with-http_geoip_module

启用 http geoip module。该模块可以依据 MaxMind GeoIP 的 IP 地址数据库对客户端的 IP 地址得到实际的地理位置信息。

--with-http_geoip_module=dynamic

启用动态 ngx_http_geoip_module

--with-http_sub_module

启用 http sub module。该模块可以在 Nginx 返回客户端的 HTTP 响应包中将指定的字符串替换为自己需要的字符串。例如,在 HTML 的返回中,将</head>替换为</head><script language="javascript" src="$script"></script>

--with-http_dav_module

启用 http dav module。这个模块可以让 Nginx 支持 Webdav 标准,如支持 Webdav 协议中的 PUT、DELETE、COPY、MOVE、MKCOL 等请求

--with-http_flv_module

启用 http flv module。这个模块可以在向客户端返回响应时,对 FLV 格式的视频文件在 header 头做一些处理,使得客户端可以观看、拖动 FLV 视频

--with-http_mp4_module

启用构建 ngx_http_mp4_module 模块,该模块为 mp4 文件提供伪流媒体服务端支持。默认不构建该模块

--with-http_gunzip_module

启用构建 ngx_http_gunzip_module 模块,该模块为那些不支持 gzip 模块的客户端解压缩 gzip 格式相应的响应。这个模块对存储压缩存储的数据以及节省磁盘空间及减少 I/O 等有很大好处。这个模块不是默认的内建模块

--with-http_gzip_static_module

启用 ngx_http_gzip_static_module。如果采用 gzip 模块把一些文档进行 gzip 格式压缩后再返回给客户端,那么对同一个文件每次都会重新压缩,这是比较消耗服务器 CPU 资源的。gzip static 模块可以在做 gzip 压缩前,先查看相同位置是否有已经做过 gzip 压缩的.gz 文件,如果有就直接返回。这样就可以预先在服务器上做好文档的压缩,给 CPU 减负。

--with-http_auth_request_module

启用 ngx_http_auth_request_module。这个是 nginx 的一个验证模块,这个模块允许您的 nginx 通过发送请求到后端服务器(一般是应用服务器,例如 tomcat,或者 php 等)进行请求,并且根据请求决定是验证通过或者不通过

--with-http_random_index_module

启用 ngx_http_random_index_module。该模块在客户端访问某个目录时,随机返回该目录下的任意文件。

--with-http_secure_link_module

启用 ngx_http_secure_link_module。该模块提供一种验证请求是否有效的机制。例如,它会验证 URL 中需要加入的 token 参数是否属于特定客户端发来的,以及检查时间戳是否过期。

--with-http_degradation_module

启用 ngx_http_degradation_module。该模块针对一些特殊的系统调用(如 sbrk)做一些优化,如直接返回 HTTP 响应码为 204 或 444,目前不支持 Linux 系统。

--with-http_slice_module

启用 ngx_http_slice_module 模块。该模块可以将一个请求分解成多个子请求,每个子请求返回响应内容的一个片段,让大文件的缓存更有效率。该模块默认不构建

--with-http_stub_status_module

启用 ngx_http_stub_status_module。该模块可以让运行中的 Nginx 提供性能统计页面,获取相关的并发连接、请求的信息。

--without-http_charset_module

禁用 ngx_http_charset_module。这个模块可以将服务器发出的 HTTP 响应重编码。

--without-http_gzip_module

禁用 ngx_http_gzip_module。在服务器发出的 HTTP 响应包中,这个模块可以按照配置文件指定的 content-type 对特定大小的 HTTP 响应包体执行 gzip 压缩。

--without-http_ssi_module

禁用 ngx_http_ssi_module。该模块可以在向用户返回的 HTTP 响应包体中加入特定的内容,如 HTML 文件中固定的页头和页尾。

--without-http_userid_module

禁用 ngx_http_userid_module。该模块可以通过 HTTP 请求头部信息里的一些字段认证用户信息,以确定请求是否合法。

--without-http_access_module

禁用 ngx_http_access_module。该模块可以根据 IP 地址限制能够访问服务器的客户端。

--without-http_auth_basic_module

禁用 ngx_http_auth_basic_module。该模块可以提供最简单的用户名/密码认证。

--without-http_mirror_module

禁用 ngx_http_mirror_module。该模块通过创建后台镜像子请求来实现原始请求的镜像。

--without-http_autoindex_module

禁用 ngx_http_autoindex_module。该模块提供简单的目录浏览功能。

--without-http_geo_module

禁用 ngx_http_geo_module。该模块可以定义一些变量,这些变量的值将与客户端 IP 地址关联,这样 Nginx 针对不同的地区的客户端(根据 IP 地址判断)返回不一样的结果,例如不同地区显示不同语言的网页。

--without-http_map_module

禁用 ngx_http_map_module。该模块可以建立一个 key/value 映射表,不同的 key 得到相应的 value,这样可以针对不同的 URL 做特殊处理。例如,返回 302 重定向响应时,可以期望 URL 不同时返回的 Location 字段也不一样。

--without-http_split_clients_module

禁用 ngx_http_split_clients_module。该模块会根据客户端的信息,例如 IP 地址、header 头、cookie 等,来区分处理。

--without-http_referer_module

禁用 ngx_http_referer_module。该模块可以根据请求中的 refer 字段来拒绝请求。

--without-http_rewrite_module

禁用 ngx_http_rewrite_module。 该模块提供 HTTP 请求在 Nginx 服务内部的重定向功能,依赖 PCRE 库。

--without-http_proxy_module

禁用 ngx_http_proxy_module。 该模块提供基本的 HTTP 反向代理功能。

--without-http_fastcgi_module

禁用 ngx_http_fastcgi_module。 该模块提供 FastCGI 功能。

--without-http_uwsgi_module

禁用 ngx_http_uwsgi_module。该模块提供 uWSGI 功能。uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。

--without-http_scgi_module

禁用 ngx_http_scgi_module。该模块提供 SCGI 功能。SCGI(Simple Common Gateway Interface),简单通用网关接口。是 CGI 的替代协议,与 FastCGI 相似,但更简单。

--without-http_grpc_module

禁用 ngx_http_grpc_module。模块允许将请求传递给 gRPC 服务器

--without-http_memcached_module

禁用 ngx_http_memcached_module。该模块可以使得 Nginx 直接由上游的 memcached 服务读取数据,并简单地适配成 HTTP 响应返回给客户端。

--without-http_limit_conn_module

禁用 ngx_http_limit_conn_module。该模块针对某个 IP 地址限制并发连接数。

--without-http_limit_req_module

禁用 ngx_http_limit_req_module。该模块针对某个 IP 地址限制并发请求数。

--without-http_empty_gif_module

禁用 ngx_http_empty_gif_module。该模块可以使得 Nginx 在收到无效请求时,立刻返回内存中的 1×1 像素的 GIF 图片。这种好处在于,对于明显的无效请求不会去试图浪费服务器资源。

--without-http_browser_module

禁用 ngx_http_browser_module。该模块会根据 HTTP 请求中的 user-agent 字段(该字段通常由浏览器填写)来识别浏览器

--without-http_upstream_hash_module

禁用 ngx_http_upstream_hash_module。该模块支持哈希负载均衡方法,特别是 url_hash

--without-http_upstream_ip_hash_module

禁用 ngx_http_upstream_ip_hash_module。该模块提供当 Nginx 与后端 server 建立连接时,会根据 IP 做哈希运算来决定与后端哪台 server 通信,这样可以实现负载均衡。

--without-http_upstream_least_conn_module

禁用 ngx_http_upstream_least_conn_module。该模块提供当 Nginx 与后端 server 建立连接时,会通过最少连接负载均衡算法来决定与后端哪台 server 通信,简单来说就是每次选择的都是当前最少连接的一个 server(这个最少连接不是全局的,是每个进程都有自己的一个统计列表)。

--without-http_upstream_random_module

禁用 ngx_http_upstream_random_module。该模块实现随机负载均衡

--without-http_upstream_keepalive_module

禁用 ngx_http_upstream_keepalive_module。这是一个用于 nginx 的实现缓存的后端连接的 keepalive 平衡器模块。

--without-http_upstream_zone_module

禁用 ngx_http_upstream_zone_module。该模块分配出共享内存,将其他 upstream 模块定义的负载均衡策略数据,运行时每个上游服务的状态数据存放在共享内存上,以对所有的 nginx worker 进程生效

--with-http_perl_module

启用 ngx_http_perl_module。该模块用于在 Perl 中实现位置和变量处理程序,并将 Perl 调用插入到 SSI 中。

--with-http_perl_module=dynamic

启动动态 ngx_http_perl_module

--with-perl_modules_path=PATH

设置 Perl 模块路径。只有使用了第三方的 perl module,才需要配置这个路径。

--with-perl=PATH

设置 perl binary 的路径。如果配置的 Nginx 会执行 Perl 脚本,那么就必须设置此路径。

--http-log-path=PATH

设置 access 日志存放路径。安装后,该路径可以通过在 nginx.conf 中使用 access_log 来进行修改。默认的文件路径为 prefix/logs/access.log

--http-client-body-temp-path=PATH

处理 HTTP 请求时如果请求的包体需要暂时存放到临时磁盘文件中,则把这样的临时文件存放到该路径下。安装后,该路径可以通过在 nginx.conf 中使用 client_body_temp_path 来进行修改。默认的文件路径为 prefix/client_body_temp

--http-proxy-temp-path=PATH

Nginx 作为 HTTP 反向代理服务器时,上游服务器产生的 HTTP 包体在需要临时存放到磁盘文件时,这样的临时文件将存放到该路径下。安装后,该路径可以通过在 nginx.conf 中使用 proxy_temp_path 来进行修改。默认的文件路径为 prefix/proxy_temp

--http-fastcgi-temp-path=PATH

设置 Fastcgi 所使用临时文件的存放路径。安装后,该路径可以通过在 nginx.conf 中使用 fastcgi_temp_path 来进行修改。默认的文件路径为 prefix/fastcgi_temp

--http-uwsgi-temp-path=PATH

设置 uWSGI 所使用临时文件的存放路径。安装后,该路径可以通过在 nginx.conf 中使用 uwsgi_temp_path 来进行修改。默认的文件路径为 prefix/uwsgi_temp

--http-scgi-temp-path=PATH

设置 SCGI 所使用临时文件的存放路径。安装后,该路径可以通过在 nginx.conf 中使用 scgi_temp_path 来进行修改。默认的文件路径为 prefix/scgi_temp

--without-http

禁用 HTTP 服务器。

--without-http-cache

禁用 HTTP 服务器里的缓存 Cache 特性。

--with-mail

启用 POP3/IMAP4/SMTP proxy module 安装邮件服务器反向代理模块,使 Nginx 可以反向代理 IMAP、POP3、SMTP 等协议,该模块默认不安装。

--with-mail=dynamic

启用动态 POP3/IMAP4/SMTP proxy module

--with-mail_ssl_module

安装 ngx_mail_ssl_module。该模块可以使 IMAP、POP3、SMTP 等协议基于 SSL/TLS 协议之上使用。该模块默认不安装并依赖于 OpenSSL 库。

--without-mail_pop3_module

不安装 ngx_mail_pop3_module。在使用–with-mail 参数后,pop3 module 是默认安装的,以使 Nginx 支持 POP3 协议

--without-mail_imap_module

不安装 ngx_mail_imap_module。在使用–with-mail 参数后,imap module 是默认安装的,以使 Nginx 支持 IMAP 协议。

--without-mail_smtp_module

不安装 ngx_mail_smtp_module。在使用–with-mail 参数后,smtp module 是默认安装的,以使 Nginx 支持 SMTP 协议。

--with-stream

启用 TCP/UDP 代理模块(默认打开)

--with-stream=dynamic

启用动态 TCP/UDP 代理模块

--with-stream_ssl_module

启用 ngx_stream_ssl_module。该模块提供了一种用于流代理服务器与 SSL / TLS 协议工作必要的支持。构建和运行该模块需要 openSSL 库

--with-stream_realip_module

启用 ngx_stream_realip_module。模块用于将客户端地址和端口更改为在 PROXY 协议报头中发送的地址和端口。通过在 nginx.conf 的 listen 指令中设置 proxy_protocol 参数,必须先启用 PROXY 协议

--with-stream_geoip_module

启用 ngx_stream_geoip_module。该模块根据客户端 IP 地址和预编译的 MaxMind 数据库创建变量。

--with-stream_geoip_module=dynamic

启用动态 ngx_stream_geoip_module

--with-stream_ssl_preread_module

启用 ngx_stream_ssl_preread_module。该模块允许从 ClientHello 消息中抽取信息而不终止 SSL / TLS

--without-stream_limit_conn_module

禁用 ngx_stream_limit_conn_module。该模块被用于限制每个定义的键连接的数量,如每个 ip 地址的连接数量。

--without-stream_access_module

禁用 ngx_stream_access_module。该模块允许限制访问某些客户端地址

--without-stream_geo_module

禁用 ngx_stream_geo_module。该模块创建值依赖于客户端 ip 的变量

--without-stream_map_module

禁用 ngx_stream_map_module。该模块创建值依赖于其他变量值的变量

--without-stream_split_clients_module

禁用 ngx_stream_split_clients_module。该模块创建变量用于 A/B 测试。

--without-stream_return_module

禁用 ngx_stream_return_module。该模块允许发送一个指定的值给客户端,然后关闭连接。

--without-stream_upstream_hash_module

禁用 ngx_stream_upstream_hash_module。该模块实现了哈希负载均衡方法

--without-stream_upstream_least_conn_module

禁用 ngx_stream_upstream_least_conn_module。该模块实现了最少连接负载均衡方法

--without-stream_upstream_random_module

禁用 ngx_stream_upstream_random_module 该模块实现了随机负载均衡方法

--without-stream_upstream_zone_module

禁用 ngx_stream_upstream_zone_module。该模块将 upstream 组的运行时状态存储在共享内存中

--with-google_perftools_module

启用 ngx_google_perftools_module。该模块提供 Google 的性能测试工具。

--with-cpp_test_module

启用 ngx_cpp_test_module

--add-module=PATH

当在 Nginx 里加入第三方模块时,通过这个参数指定第三方模块的路径。

--add-dynamic-module=PATH

当在 Nginx 里加入动态加载的第三方模块时,通过这个参数指定第三方模块的路径。

--with-compat

启用动态模块兼容性

--with-cc=PATH

设置 C 编译器的路径

--with-cpp=PATH

设置 C 预编译器的路径

--with-cc-opt=OPTIONS

如果希望在 Nginx 编译期间指定加入一些编译选项,如指定宏或者使用-I 加入某些需要包含的目录,这时可以使用该参数达成目的

--with-ld-opt=OPTIONS

最终的二进制可执行文件是由编译后生成的目标文件与一些第三方库链接生成的,在执行链接操作时可能会需要指定链接参数,–with-ld-opt 就是用于加入链接时的参数。例如,如果我们希望将某个库链接到 Nginx 程序中,需要在这里加入–with-ld-opt=libraryName -LibraryPath,其中 libraryName 是目标库的名称,LibraryPath 则是目标库所在的路径

--with-cpu-opt=CPU

指定 CPU 处理器架构,只能从以下取值中选择:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, sparc32, sparc64, ppc64

--without-pcre

如果确认 Nginx 不用解析正则表达式,也就是说,nginx.conf 配置文件中不会出现正则表达式,那么可以使用这个参数

--with-pcre

强制使用 PCRE 库

--with-pcre=DIR

指定 PCRE 库的源码位置,在编译时会进入该目录编译 PCRE 源码

--with-pcre-opt=OPTIONS

编译 PCRE 源码时希望加入的编译选项

--with-pcre-jit

使用 JIT 编译支持构建 PCRE

--with-zlib=DIR

指定 zlib 库的源码位置,在编译 Nginx 时会进入该目录编译 zlib 源码。如果使用了 gzip 压缩功能,就需要 zlib 库的支持

--with-zlib-opt=OPTIONS

编译 zlib 源码时希望加入的编译选项

--with-zlib-asm=CPU

指定对特定的 CPU 使用 zlib 库的汇编优化功能,目前仅支持两种架构:pentium 和 pentiumpro

--with-libatomic

强制使用 atomic 库。atomic 库是 CPU 架构独立的一种原子操作的实现。它支持以下体系架构:x86(包括 i386 和 x86_64)、PPC64、Sparc64(v9 或更高版本)或者安装了 GCC4.1.0 及更高版本的架构。

--with-libatomic=DIR

指定 atomic 库所在的位置

--with-openssl=DIR

指定 OpenSSL 库的源码位置,在编译 Nginx 时会进入该目录编译 OpenSSL 源码。 注意:如果 Web 服务器支持 HTTPS,也就是 SSL 协议,Nginx 要求必须使用 OpenSSL。可以访问http://www.openssl.org/免费下载

--with-openssl-opt=OPTIONS

编译 OpenSSL 源码时希望加入的编译选项

--dry-run

仅测试配置

--platform=PLATFORM

强制指定平台名称,仅用于测试

参考文档:

openresty编译参数详解

Building nginx from Sources

nginx教程

5.编译:

gmake

6.安装 openresty:

sudo gmake install

7.服务启动:

/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf

用户头像

专注身份安全、数据安全、零信任 2021.03.24 加入

还未添加个人简介

评论 (2 条评论)

发布
用户头像
好文章,写的很细,编译参数也有注释,而且还有参考文档,赞!
2021 年 04 月 07 日 10:09
回复
用户头像
编译一把过,👍👍
2021 年 04 月 07 日 10:07
回复
没有更多了
openresty源码编译