nginxのmoduleを追加する

nginxにはmoduleという概念があります。

これは、各機能がmodule単位で実装されており、moduleを組み合わせた構成になっています。

moduleには「静的module」と「動的module」の二種類があります。

「静的module」はビルドした時にしか組み込みができません。

「動的module」はビルドし直すことなく、追加することができます。

この概念自体はApacheからあります。

そして、nginxは昔は「動的module」をサポートしていませんでした。

https://heartbeats.jp/hbblog/2016/02/nginx-dynamic-modules.html

1.9.11で対応したようです。

ただし、一部だけになります。

下記は動的に組み込みができるものです。

Certified Dynamic Modules - NGINX

moduleは、上記以外には、サードパーティー製のものがあります(OSSに感謝)

https://www.nginx.com/resources/wiki/modules/

動的に組み込めれるものもあれば、静的に組み込むしかないものもあります。

ということは、きちんと最初で使用するであろうものは、用意しておくほうがいいですね。

ソースコードからビルドする

僕はmoduleを追加するためにソースコードからビルドしています。

ソースコードのダウンロードからやります。

deployer@ik1-324-22232:wget http://nginx.org/download/nginx-1.13.5.tar.gz
deployer@ik1-324-22232:tar xvf nginx-1.13.5.tar.gz
deployer@ik1-324-22232:cd nginx-1.13.5

まずは現状確認

deployer@ik1-324-22232:~$ sudo nginx -V
nginx version: nginx/1.13.5
built by gcc 6.3.0 20170516 (Debian 6.3.0-18)

何も入っていません。

なんでこうなっているのかというと、自分はModuleを簡単に追加できると思っていたからです。

ここからhttpsを使おうとすると、nginx_http_ssl_moduleがほしいです。

最初から入れておけばよかった。

ということで追加します。

ついでにwith-http_stub_status_moduleも追加します。

deployer@ik1-324-22232:/tmp/nginx-1.13.5$ sudo ./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx --sbin-
path=/usr/sbin/nginx

deployer@ik1-324-22232:make
deployer@ik1-324-22232:make install

これでパッケージをもう一度ビルドできました。

deployer@ik1-324-22232:/tmp/nginx-1.13.5$ sudo nginx -V
nginx version: nginx/1.13.5
built by gcc 6.3.0 20170516 (Debian 6.3.0-18)
built with OpenSSL 1.1.0f  25 May 2017
TLS SNI support enabled
configure arguments: --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx

結論

原則動的に追加できないなど、nginxの特徴を押さえておくべきだった・・・orz