※以下はCentOS 7.3までの古い内容です。CentOS 7.4 では OpenSSL 1.0.2 が標準となったため、以下の作業は不要です。
CentOS7.3 に含まれる標準パッケージの OpenSSL が 1.0.1 系なので、それをリンクしてビルドした nginx 公式のバイナリでは HTTP/2 (ALPN) が利用できない。そこで、openssl-1.0.2 系のソースツリーを使って nginx 公式の SRPM をリビルドすることとする。
ついでに、geoipモジュールとdav_extモジュールも使いたいので、追加した上でビルドする。
1. コンパイルに必要なパッケージをインストール
$ sudo yum install expat-devel pcre-devel zlib-devel GeoIP-devel
2. nginxの公式レポジトリを追加
レポジトリファイルを作成する。
$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 [nginx-source] name=nginx repo - Source baseurl=http://nginx.org/packages/centos/$releasever/SRPMS/ gpgcheck=0 enabled=1
3. ダウンロード
SRPMをダウンロード・インストールする。
$ sudo yum install -y yum-utils
$ yumdownloader --source nginx
$ rpm -ivh --nosignature nginx-1.12.1-1.el7.ngx.src.rpm
今後yum updateで勝手にアップデートされないように、nginxレポジトリを無効化しておく。
$ sudo yum-config-manager --disable nginx
$ sudo yum-config-manager --disable nginx-source
OpenSSL 1.0.2 のソースをダウンロードして展開する。
$ cd /tmp
$ wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz
$ tar xzf openssl-1.0.2l.tar.gz
$ cd ~
OpenSSL のビルドはしなくてよい。
4. カスタマイズ
SRPM の spec ファイルを編集する。
$ vi rpmbuild/SPECS/nginx.spec
青字の部分は追加、赤字で打消し線のところは削除する。
# %define nginx_home %{_localstatedir}/cache/nginx %define nginx_user nginx %define nginx_group nginx %define nginx_loggroup adm # distribution specific definitions %define use_systemd (0%{?fedora} && 0%{?fedora} >= 18) || (0%{?rhel} && 0%{?rhel } >= 7) || (0%{?suse_version} == 1315) %if 0%{?rhel} == 5 %define _group System Environment/Daemons Requires(pre): shadow-utils Requires: initscripts >= 8.36 Requires(post): chkconfig Requires: openssl BuildRequires: openssl-devel %endif %if 0%{?rhel} == 6 %define _group System Environment/Daemons Requires(pre): shadow-utils Requires: initscripts >= 8.36 Requires(post): chkconfig Requires: openssl >= 1.0.1 BuildRequires: openssl-devel >= 1.0.1 %endif %if 0%{?rhel} == 7 %define _group System Environment/Daemons %define epoch 1 Epoch: %{epoch} Requires(pre): shadow-utils Requires: systemd Requires: openssl >= 1.0.1 BuildRequires: systemd BuildRequires: openssl-devel >= 1.0.1 BuildRequires: GeoIP-devel BuildRequires: expat-devel %endif %if 0%{?suse_version} == 1315 %define _group Productivity/Networking/Web/Servers %define nginx_loggroup trusted Requires(pre): shadow Requires: systemd BuildRequires: libopenssl-devel BuildRequires: systemd %endif # end of distribution specific definitions %define main_version 1.12.1 %define main_release 1%{?dist}.ngx %define bdir %{_builddir}/%{name}-%{main_version} %define WITH_CC_OPT $(echo %{optflags} $(pcre-config --cflags)) -fPIC %define WITH_LD_OPT -Wl,-z,relro -Wl,-z,now -pie %define BASE_CONFIGURE_ARGS $(echo "--prefix=%{_sysconfdir}/nginx --sbin-path=%{ _sbindir}/nginx --modules-path=%{_libdir}/nginx/modules --conf-path=%{_sysconfdi r}/nginx/nginx.conf --error-log-path=%{_localstatedir}/log/nginx/error.log --htt p-log-path=%{_localstatedir}/log/nginx/access.log --pid-path=%{_localstatedir}/r un/nginx.pid --lock-path=%{_localstatedir}/run/nginx.lock --http-client-body-tem p-path=%{_localstatedir}/cache/nginx/client_temp --http-proxy-temp-path=%{_local statedir}/cache/nginx/proxy_temp --http-fastcgi-temp-path=%{_localstatedir}/cach e/nginx/fastcgi_temp --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_ temp --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp --user=%{ngin x_user} --group=%{nginx_group} --with-compat --with-file-aio --with-threads --wi th-http_addition_module --with-http_auth_request_module --with-http_dav_module - -with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module - -with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module - -with-http_stub_status_module --with-http_sub_module --with-http_v2_module --wit h-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-s tream_ssl_module --with-stream_ssl_preread_module --with-http_geoip_module --add -module=./nginx-dav-ext-module --with-openssl=/tmp/openssl-1.0.2l") Summary: High performance web server Name: nginx Version: %{main_version} Release: %{main_release} Vendor: Nginx, Inc. URL: http://nginx.org/ Group: %{_group} Source0: http://nginx.org/download/%{name}-%{version}.tar.gz Source1: logrotate Source2: nginx.init.in Source3: nginx.sysconf Source4: nginx.conf Source5: nginx.vh.default.conf Source7: nginx-debug.sysconf Source8: nginx.service Source9: nginx.upgrade.sh Source10: nginx.suse.logrotate Source11: nginx-debug.service Source12: COPYRIGHT Source13: nginx.check-reload.sh License: 2-clause BSD-like license BuildRoot: %{_tmppath}/%{name}-%{main_version}-%{main_release}-root BuildRequires: zlib-devel BuildRequires: pcre-devel Provides: webserver %description nginx [engine x] is an HTTP and reverse proxy server, as well as a mail proxy server. %if 0%{?suse_version} == 1315 %debug_package %endif %prep %setup -q cp %{SOURCE2} . sed -e 's|%%DEFAULTSTART%%|2 3 4 5|g' -e 's|%%DEFAULTSTOP%%|0 1 6|g' \ -e 's|%%PROVIDES%%|nginx|g' < %{SOURCE2} > nginx.init sed -e 's|%%DEFAULTSTART%%||g' -e 's|%%DEFAULTSTOP%%|0 1 2 3 4 5 6|g' \ -e 's|%%PROVIDES%%|nginx-debug|g' < %{SOURCE2} > nginx-debug.init git clone https://github.com/arut/nginx-dav-ext-module.git %build ./configure %{BASE_CONFIGURE_ARGS} \ --with-cc-opt="%{WITH_CC_OPT}" \ --with-ld-opt="%{WITH_LD_OPT}" \ --with-debug --with-openssl-opt="-fPIC" make %{?_smp_mflags} %{__mv} %{bdir}/objs/nginx \ %{bdir}/objs/nginx-debug ./configure %{BASE_CONFIGURE_ARGS} \ --with-cc-opt="%{WITH_CC_OPT}" \ --with-ld-opt="%{WITH_LD_OPT}" --with-openssl-opt="-fPIC" make %{?_smp_mflags} (以下略)
5. ビルド、インストール
ビルドを実行する。
$ rpmbuild -ba rpmbuild/SPECS/nginx.spec
出来上がったら、RPMをインストールする。
$ sudo yum localinstall rpmbuild/RPMS/x86_64/nginx-1.12.1-1.el7.centos.ngx.x86_64.rpm
展開した openssl ソースを掃除しておく。
$ rm -r /tmp/openssl-1.0.2l
6. 起動
デーモンを起動する。
$ sudo systemctl enable nginx
$ sudo systemctl start nginx