ソースファイルからnginxのインストール

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"
								

2種類のバージョン

nginxのソースには2種類のバージョンがあります。

  • stable(安定版)
    nginxが日々開発している新しい機能(モジュール)は、反映されません。
    mainlineバージョンで発覚した致命的なバグは、バグが取り除かれた状態になっています。
    本番機にリリースするnginxは、安定版が推奨されます。
    2017年6月時点の安定版は、1.12.0を意味します。
  • mainline(最新版)
    nginxが日々開発している新しいバージョンのnginxです。
    幾つか実験的なモジュールを含んでおり、新しいバグが発見される可能性もあります。
    2017年6月時点の最新版は、1.13.0を意味します。

本書では、安定版の1.12.0をソースファイルからインストールする方法について記述します。

rootによる作業

以下のコマンドは、rootアカウントによる作業を実施します。

rootアカウントへのスイッチ
$ su -
								

nginxグループ

  1. 前準備で説明した「infra01」アカウントで、webサーバにTeratermからリモートログインします。
  2. nginxグループとユーザを作成します。
    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を作成します。

  3. 作業者アカウントinfra01をnginxグループに追加します。
    nginxユーザとグループの作成
    $ gpasswd -a infra01 nginx
    ユーザ infra01 をグループ nginx に追加
    $ id
    uid=1001(infra01) gid=1001(infrateam) groups=1001(infrateam),4(adm),27(sudo),131(nginx)
    								

ソースコードの取得と展開

  1. 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にインストールします。

  1. PCREパッケージの取得
    
    $ apt-get install libpcre3 libpcre3-dev
    								
  2. zlibパッケージの取得
    
    $apt-get install zlib1g-dev
    								
  3. openssh1.1.0のインストール
    
    $ 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のオプションを適切に指定する事です。

  1. MakeFileの作成
    
    $./configure
    								

    このとき各種オプションを指定します。オプションは、./configure --helpで確認できます。
    各種オプションをずらずらと直接指定することも可能ですが、次の節にあるようにシェルを作成して実行する方法を推奨します。

  2. コンパイル
    
    $make
    								

    このとき各種オプションを指定します。 オプションは、./configure --helpで確認できます。

  3. インストール
    
    $make install
    								

./configure

./configure のオプションの指定方法や実行後の確認ポイントについて説明します。

Configuration summaryの確認

./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
 							

Configuration summaryの確認2

./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 オプション漏れ防止)

この節は、必ず実施する必要はありませんが、実施した方がイントール時の入力ミス、コピペミスを防止できます。

最低限 ./configure 引数群 を実行する箇所は以下のような簡易なシェルを作って実行します。

  1. シェルファイルの作成
    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」にしました。
    実行引数は例であり、オプション一覧から選択して下さい。

  2. ファイル転送とコピー
    先に作成したconfig_nginx.shファイルをSFTPなどのファイル転送を利用して、
    nginxサーバの作業用ユーザのホームディレクテイに転送します。
    ファイル転送後、make作業を行うディレクテリにファイルをコピーします。
    ファイルのコピー
    $ cp /home/infra01/config_nginx.sh /usr/local/src/nginx-1.12.0
    								
  3. config_nginx.shの実行
    
    $cd /usr/local/src/nginx-1.12.0
    $sh config_nginx.sh
    								
    • ./configureを実行する代わりに config_nginx.shを実行します。
    • cat result.txtを実行し、./configureの実行結果を確認します。
  4. nginxとのオプション確認

    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とバックアップされます。

次頁以降にオプションの説明とサービス化について記載します。