Nginxをソースからビルドしてインストールする方法

スポンサーリンク

Nginx をソースからビルドしてインストールする方法です。

検証環境

Ubuntu 16.04 を使用しました。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

ソースファイルのダウンロード

公式ファイルからソースパッケージをダウンロードします。

$ curl -LO https://nginx.org/download/nginx-1.12.0.tar.gz
$ tar zxvf nginx-1.12.0.tar.gz
$ cd nginx-1.12.0/

nginx: download

Makefileの作成

./configureを実行して Makefile を作成します。指定できるオプションの一部を以下にまとめますが、全てのオプションは./configure --helpで確認してください。

オプション 内容
--prefix=PATH インストールディレクトリ
--sbin-path=PATH nginxバイナリのパス名
--conf-path=PATH confファイルのパス名
--pid-path=PATH pidファイルのパス名
--error-log-path=PATH エラーログのパス名
--http-log-path=PATH アクセスログのパス名
--user=NAME Workerプロセスのユーザーを指定
--group=NAME Workerプロセスのグループを指定
--[with|without]-select_module select_moduleを有効/無効
--[with|without]-poll_module poll_moduleを有効/無効
--without-http_gzip_module http_gzip_moduleを無効
--without-http_rewrite_module http_rewrite_moduleを無効
--without-http_proxy_module http_proxy_moduleを無効
--with-http_ssl_module http_ssl_moduleを有効
--with-http_v2_module http_v2_moduleを有効
--without-pcre PCREライブラリの使用を無効
--with-pcre PCREライブラリの使用を強制
--with-pcre=PATH PCREライブラリのソースパスを指定
--with-pcre-jit JITコンパイルサポートでPCREをビルド
--with-openssl=PATH OpenSSLライブラリのソースパスを指定
--with-zlib=PATH zlibライブラリのソースパスを指定
--with-libatomic=PATH libatomicライブラリのソースパスを指定
--with-cc-opt=parameters 追加のCコンパイラオプションを設定
--with-ld-opt=parameters 追加のリンカーオプションを設定

オプション無しで実行した結果は以下の通りです。SSLも無効になってます。

$ ./configure
...
Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/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"

Building nginx from Sources

Makefile作成時のエラー

PCRE library が無いというエラー。http_rewrite_moduleを without するか--with-pcreでソースディレクトリを指定してねと言ってます。

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

PCRE をインストールしてください。

# ubuntu
$ sudo apt-get install libpcre3-dev
# centos
$ sudo yum install pcre-devel

コンパイルとインストール

configure が通ったらソースをmakeでコンパイルしてインストールします。インストール先が/usr/localの場合は権限の問題でsudoを付けて実行します。

$ make
$ sudo make install

インストール先は configure の--prefixオプションで指定した場所です。今回は指定しなかったので/usr/local/nginx配下にインストールされました。

$ ll /usr/local/nginx/
total 44
drwxr-xr-x 11 root    root 4096 May  6 08:33 ./
drwxr-xr-x 11 root    root 4096 May  6 08:30 ../
drwxr-xr-x  2 root    root 4096 May  6 08:30 conf/
drwxr-xr-x  2 root    root 4096 May  6 08:30 html/
drwxr-xr-x  2 root    root 4096 May  6 08:40 logs/
drwxr-xr-x  2 root    root 4096 May  6 08:39 sbin/

起動スクリプト

パッケージをインストールした場合は起動スクリプトも一緒についてきますが、ソースからビルドした場合は自分で用意します。以下リンク先のいずれかを使用してディレクトリパスなどを変更して使用してください。

init-script

GitHub - JasonGiedymin/nginx-init-ubuntu: Tried and true Nginx init script

Debian/Ubuntu Nginx init Script (opt) » KBeezie

upsert

Ubuntu Upstart | NGINX

systemd

NGINX systemd service file | NGINX

systemd のファイルを/lib/systemd/system/nginx.serviceに作成して起動しました。

$ sudo systemctl start nginx
$ sudo systemctl status nginx
● nginx.service - The NGINX HTTP and reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-05-06 08:35:35 UTC; 4s ago
  Process: 16134 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
  Process: 16179 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 16175 ExecStartPre=/usr/local/nginx/sbin/nginx -t (code=exited, status=0/SUCCESS)
 Main PID: 16180 (nginx)
    Tasks: 2
   Memory: 940.0K
      CPU: 6ms
   CGroup: /system.slice/nginx.service
           ├─16180 nginx: master process /usr/local/nginx/sbin/ngin
           └─16183 nginx: worker process