nginx-build
- provides a command to build nginx seamlessly.
- wget for downloading nginx and external libraries
- git and hg for downloading 3rd party modules
- patch for applying patch to nginx
go get -u github.com/cubicdaiya/nginx-build
If 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.example
In 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_light
On 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_upstream
There 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.8
Give -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.38
Give -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.2f
nginx-build
provides a mechanism for embedding 3rd-party modules.
Prepare a ini-file below.
[echo-nginx-module]
form=git
url=https://github.com/openresty/echo-nginx-module.git
rev=v0.58
[ngx_devel_kit]
form=git
url=https://github.com/simpl/ngx_devel_kit
rev=v0.2.19
Give this file to nginx-build
with -m
.
$ nginx-build -d work -m modules.cfg.example
Give dynamic=true
.
[ngx_dynamic_upstream]
form=git
url=https://github.com/cubicdaiya/ngx_dynamic_upstream.git
dynamic=true
There 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=http://hg.nginx.org/njs
shprov=./configure && make
shprovdir=..
[ngx_small_light]
form=git
url=https://github.com/cubicdaiya/ngx_small_light
rev=v0.6.15
dynamic=true
shprov=./setup
nginx-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_module
nginx-build
supports to build OpenResty.
$ nginx-build -d work -openresty -pcre -openssl
If 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.
nginx-build
supports to build Tengine.
$ nginx-build -d work -tengine -openssl
If 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.