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