Ubuntu16.04LTSに対して、nginxをソースファイルからインストールする方法について説明します。
OSの確認
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
nginxのソースには2種類のバージョンがあります。
本書では、安定版の1.12.0をソースファイルからインストールする方法について記述します。
以下のコマンドは、rootアカウントによる作業を実施します。
rootアカウントへのスイッチ
$ su -
nginxユーザとグループの作成
$ adduser --system --no-create-home --shell /bin/false --group --disabled-login nginx
システムユーザー `nginx' (UID 122) を追加しています...
新しいグループ `nginx' (GID 131) を追加しています...
新しいユーザー `nginx' (UID 122) をグループ `nginx' に追加しています...
ホームディレクトリ `/home/nginx' を作成しません。
このコマンドにより、リモートログイン及びログインの不可能なシステムユーザnginxを作成します。
nginxユーザとグループの作成
$ gpasswd -a infra01 nginx
ユーザ infra01 をグループ nginx に追加
$ id
uid=1001(infra01) gid=1001(infrateam) groups=1001(infrateam),4(adm),27(sudo),131(nginx)
$ cd /usr/local/src
$ wget http://nginx.org/download/nginx-1.12.0.tar.gz
$ tar zxvf nginx-1.12.0.tar.gz
サーバーがインターネットに接続できない場合には、http://nginx.org/en/download.htmlの頁から インターネット接続が可能なPCより直接対象の.tar.gzを取得して下さい。その上でSFTPなどを利用して、対象のサーバのinfra01ユーザのホームディレクティにファイル転送します。
locationの解析を高速化するためのPCRE、リクエストを圧縮するためのzlib、
httpsを利用するためのopensslライブラリをLinuxにインストールします。
$ apt-get install libpcre3 libpcre3-dev
$apt-get install zlib1g-dev
$ cd /usr/local/src
$ wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
$ cd openssl-1.1.0f/
$ ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
$ make
$ make install
nginx1.12.0のsslモジュールを有効にする場合、openssl1.1系を必要とされます。
Ubuntu16.04LTS及び16.10環境下でapt-getによるパッケージのインストールでは、openssl1.0系しか取得できません。
そのため、上記手順のように最新のソースコードを取得してコンパイルします。
nginxをインストールするには、Makefileの作成、コンパイル、インストールの3ステップで実現できます。
ポイントとなる点は、貴方の目的としているnginxになるように./configureのオプションを適切に指定する事です。
$./configure
このとき各種オプションを指定します。オプションは、./configure --helpで確認できます。
各種オプションをずらずらと直接指定することも可能ですが、次の節にあるようにシェルを作成して実行する方法を推奨します。
$make
このとき各種オプションを指定します。 オプションは、./configure --helpで確認できます。
$make install
./configure のオプションの指定方法や実行後の確認ポイントについて説明します。
./configure実行時に指定したオプションとライブラリの依存関係による出力状態が変わります。
以下の出力例は、PCREとzlibをapt-getでインストールし、opensslを --with-openssl=/usr/local/src/openssl-1.1.0fを指定し、
スレッドプールのために--with-threads を指定した場合の出力例です。
出力例1
Configuration summary
+ using threads
+ using system PCRE library
+ using OpenSSL library: /usr/local/src/openssl-1.1.0f
+ using system zlib library
opensslのオプションを未指定時には、「OpenSSL library is not used」と出力されます。
出力例2
Configuration summary
+ using threads
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library
./configureで指定したオプション又はデフォルト値によって、Configuration summaryにmakeするパスの情報が出力されます。
./configure の例
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/conf/nginx.conf \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/run/nginx/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-openssl=/usr/local/src/openssl-1.1.0f \
--with-http_ssl_module \
--with-http_realip_module \
--without-http_ssi_module \
--with-threads \
--with-pcre \
--with-pcre-jitsss
出力例
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/etc/nginx/conf"
nginx configuration file: "/etc/nginx/conf/nginx.conf"
nginx pid file: "/var/run/nginx/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
./configureのオプションで指定したパスとConfiguration summaryのパスが一致している事を確認します。
この節は、必ず実施する必要はありませんが、実施した方がイントール時の入力ミス、コピペミスを防止できます。
最低限 ./configure 引数群 を実行する箇所は以下のような簡易なシェルを作って実行します。
config_nginx.sh
#!/bin/sh
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/conf/nginx.conf \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/run/nginx/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-openssl=/usr/local/src/openssl-1.1.0f \
--with-threads \
--with-http_ssl_module \
--with-http_realip_module \
--without-http_ssi_module \
--with-threads \
--with-pcre \
--with-pcre-jit > result.txt
> result.txtの記述により、reuslt.txtファイルに./configure実行結果を出力するようにしています。
ファイルは、作業用PC(Windows,Macなど)でお好きなエディタで作成して下さい。
ファイル保存時自に改行コードを「LF」にして下さい。ファイル内「¥」は、バックスラッシュです。
ファイル名は、何にしても良いです。私は「config_nginx.sh」にしました。
実行引数は例であり、オプション一覧から選択して下さい。
ファイルのコピー
$ cp /home/infra01/config_nginx.sh /usr/local/src/nginx-1.12.0
$cd /usr/local/src/nginx-1.12.0
$sh config_nginx.sh
make 及びmake install 終了後に指定したオプションが正しく適用されているか
nginx -Vの出力内容と作成したconfig_nginx.shを対比して確認します。
$cd /usr/local/nginx/sbin
$./nginx -V
再インストールの方法は、以下になります。
再インストール方法
$ps -aux | grep nginx
※.nginxが起動していないことを確認します。
$cd /usr/local/src/nginx-1.12.0
$su -
$make clean
$./configure
$make
$make install
nginxのprefixに変更が無ければ、古いnginxのバイナリがnginx.oldとバックアップされます。
次頁以降にオプションの説明とサービス化について記載します。