nginx-build - provides a command to build nginx seamlessly.
go get -u github.com/cubicdaiya/nginx-buildIf you don't have go-runtime, you may download the binary from here.
If you are Mac OS X user, you can use Homebrew.
brew tap cubicdaiya/nginx-build
brew install nginx-build
$ nginx-build -d work
nginx-build: 0.9.1
Compiler: gc go1.6.1
2016/04/21 09:40:12 Download nginx-1.9.15.....
2016/04/21 09:40:19 Extract nginx-1.9.15.tar.gz.....
2016/04/21 09:40:19 Generate configure script for nginx-1.9.15.....
2016/04/21 09:40:19 Configure nginx-1.9.15.....
2016/04/21 09:40:22 Build nginx-1.9.15.....
2016/04/21 09:40:25 Complete building nginx!
nginx version: nginx/1.9.15
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
configure arguments:
2016/04/21 09:40:25 Enter the following command for install nginx.
$ cd work/nginx/1.9.15/nginx-1.9.15
$ sudo make install
$nginx-build provides a mechanism for customizing configuration for building nginx.
Prepare a configure script like the following.
#!/bin/sh
./configure \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \Give this file to nginx-build with -c.
$ nginx-build -d work -c configure.exampleIn the v0.4.0 or later, nginx-build allows to use nginx's configure options directly.
$ nginx-build -d work \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--with-http_stub_status_module \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--with-debug \
--with-http_gzip_static_module \
--with-http_v2_module \
--with-http_ssl_module \
--with-pcre-jit \But there are limitations. See here about details.
nginx-build allows to use multiple --add-module and --add-dynamic-module.
$ nginx-build \
-d work \
--add-module=/path/to/ngx_dynamic_upstream \
--add-dynamic-module=/path/to/ngx_small_lightOn the other hand, nginx-build allows to embed multiple 3rd party modules with the single --add-module and --add-dynamic-module like the following, too.
$ nginx-build \
-d work \
--add-module=/path/to/ngx_small_light,/path/to/ngx_dynamic_upstreamThere are the limitations for the direct configuration below.
--with-pcre(force PCRE library usage) is not allowed--with-pcre=DIR(set path to PCRE library sources) is allowed--with-libatomic(force libatomic_ops library usage) is not allowed--with-libatomic=DIR(set path to libatomic_ops library sources) is allowed
The limitations above are attributed by the flag package of Go. (multiple and different types from each other are not allowed) By the way, the options above are allowed in a prepared configure script, of course.
Give -zlib to nginx-build.
$ nginx-build -d work -zlib-zlibversion is an option to set a version of zlib.
$ nginx-build -d work -zlib -zlibversion=1.2.9Give -pcre to nginx-build.
$ nginx-build -d work -pcre-pcreversion is an option to set a version of PCRE.
$ nginx-build -d work -pcre -pcreversion=8.38Give -openssl to nginx-build.
$ nginx-build -d work -openssl-opensslversion is an option to set a version of OpenSSL.
$ nginx-build -d work -openssl -opensslversion=1.0.2fGive -libressl to nginx-build.
$ nginx-build -d work -libressl-libresslversion is an option to set a version of LibreSSL.
$ nginx-build -d work -libressl -libresslversion=2.5.4Sometimes an error occurs when downloading the source code. Please refer to the following PR for more information. Downloading the source code has been successful, so you do not have to worry about it.
nginx-build provides a mechanism for embedding 3rd-party modules.
Prepare a ini-file below.
[ngx_devel_kit]
form=git
url=https://github.com/simpl/ngx_devel_kit
rev=v0.2.19Give this file to nginx-build with -m.
$ nginx-build -d work -m modules.cfg.exampleGive dynamic=true.
[ngx_dynamic_upstream]
form=git
url=https://github.com/cubicdaiya/ngx_dynamic_upstream.git
dynamic=trueThere are some 3rd-party modules expected provision. nginx-build provides the options such as shprov and shprovdir for this problem.
There is the example configuration below.
[njs/nginx]
form=hg
url=https://hg.nginx.org/njs
shprov=./configure && make
shprovdir=..
[ngx_small_light]
form=git
url=https://github.com/cubicdaiya/ngx_small_light
rev=v0.9.2
dynamic=true
shprov=./setupnginx-build provides the options such as -patch and -patch-opt for applying patch to nginx.
nginx-build \
-d work \
-patch nginx__http2_spdy.patch \
-patch-opt "-p1" \
-v 1.9.7 \
--with-http_spdy_module \
--with-http_v2_modulenginx-build supports a certain level of idempotent build of nginx.
If you want to ensure a build of nginx idempotent and do not want to build nginx as same as already installed nginx,
give -idempotent to nginx-build.
$ nginx-build -d work -idempotent-idempotent ensures an idempotent by checking the software versions below.
- nginx
- PCRE
- zlib
- OpenSSL
On the other hand, -idempotent does not cover versions of 3rd party modules and dynamic linked libraries.
nginx-build supports to build OpenResty.
$ nginx-build -d work -openresty -pcre -opensslIf you don't install PCRE and OpenSSL on your system, it is required to add the option -pcre and -openssl.
And there is the limitation for the support of OpenResty.
nginx-build does not allow to use OpenResty's unique configure options directly.
But you can use the common options of nginx and OpenResty directly.
If you want to use OpenResty's unique configure option, Configuration for building nginx is helpful.
nginx-build supports to build Tengine.
$ nginx-build -d work -tengine -opensslIf you don't install OpenSSL on your system, it is required to add the option -openssl.
There is the limitation for the support of Tengine.
nginx-build does not allow to use Tengine's unique configure options directly.
But you can use the common options of nginx and Tengine directly.