CentOS7にNginxをソースコードからインストールしてみた。

CentOS7のNginxのバージョンが古いためアンインストールしてから新しいバージョンをソースコードからインストールしてみました。新しいバージョンは 1.27.2 になります。作業はrootユーザーで行います。

まずは古いNginxをアンインストールします。

# yum remove nginx

アンインストールができたらソースファイルを格納するディレクトリに移動します。

# cd /usr/local/src

ソースファイルをダウンロードします。今回は 1.27.2 ですが、バージョンは必要に応じて書き換えてください。

# wget https://nginx.org/download/nginx-1.27.2.tar.gz

ダウンロードしたソースファイルを展開します。

# tar zxvf nginx-1.27.2.tar.gz

展開したら解凍したディレクトリに移動します。

# cd nginx-1.27.2

ここで ./configure を実行するのですがパラメーターの指定があります。もともと古いNginxがパッケージインストールされていたのですが、同じところにインストールされるようパラメーターを指定します。具体的には以下で実施しました。改行をして見やすくしていますが実際は1行です。


# ./configure
 --prefix=/etc/nginx
 --sbin-path=/usr/sbin/nginx
 --modules-path=/usr/lib64/nginx/modules
 --conf-path=/etc/nginx/nginx.conf
 --error-log-path=/var/log/nginx/error.log
 --http-log-path=/var/log/nginx/access.log
 --pid-path=/var/run/nginx.pid
 --lock-path=/var/run/nginx.lock
 --http-client-body-temp-path=/var/cache/nginx/client_temp
 --http-proxy-temp-path=/var/cache/nginx/proxy_temp
 --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
 --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
 --http-scgi-temp-path=/var/cache/nginx/scgi_temp
 --user=nginx --group=nginx --with-compat
 --with-file-aio
 --with-threads
 --with-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
 --with-mail
 --with-mail_ssl_module
 --with-stream
 --with-stream_realip_module
 --with-stream_ssl_module
 --with-stream_ssl_preread_module
 --with-http_v3_module
 --with-openssl=/usr/local/src/openssl-3.0.15

若干独自の追加があるので補足をしておきます。

NginxがHTTP/3に対応するように --with-http_v3_module を指定しています。ただし ngx_http_v3_module は現時点では実験的なものらしく自己責任です。また OpenSSLに静的リンクさせるため --with-openssl=/usr/local/src/openssl-3.0.15 も指定しています。--with-openssl を使用する場合はOpenSSLのソースファイルのダウンロード、および --with-http_ssl_module の指定もあわせて必要です。

そのほかは一般的なパラメータ指定です。

./configure が終わったらmakeを実行します。

# make

makeは少し時間がかかります。コンソール画面にもログがかなり出ます。終わるのを待ちます。makeが終わってからインストールを行います。

# make install

インストールが終わったらNginxのバージョンを確認してみます。

# nginx -V

結果はこんな感じです。


# nginx -V
nginx version: nginx/1.27.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 3.0.15 3 Sep 2024
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx ・・(省略)・・ --with-openssl=/usr/local/src/openssl-3.0.15

Nginxの制御をするためにユニット定義ファイルを作成します。作成する場所は /etc/systemd/system 配下です。

# cd /etc/systemd/system

パッケージインストールした場合のユニット定義ファイルは /usr/lib/systemd/system 配下となるのですが、今回は独自にユニット定義ファイルを用意するので /etc 配下の方にしました。

ユニット定義ファイルの名前は nginx.service として以下の内容を書き込みます。

# vi nginx.service


[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target

ユニット定義ファイルが作成できたらsystemdに読み込ませます。

# systemctl daemon-reload

ちなみに今回はわけあってNginxのポートを80から2000に変更しています。ですので以下の作業を追加しています。ポートの変更がない方はここの部分は読み飛ばしてください。

/etc/nginx/nginx.conf の修正
serverディレクティブの listen を2000に修正。

firewalldの穴あけ(ポート2000を通すようにする)。
# firewall-cmd --add-port=2000/tcp

なおfirewalldの設定を戻す(ポート2000を通さないようにする)は以下です。
# firewall-cmd --remove-port=2000/tcp

準備が出来たらNginxを起動させます。

# systemctl start nginx

ブラウザから「http://xxx.xxx.xxx.xxx:2000/」(xxxはIPアドレス)を指定して Welcome to nginx! が表示されれば成功です。

追記
古いNginxをアンインストールすると /etc/logrotate.d 配下のlogrotateのコンフィグファイルが nginx.rpmsave にリネームされます。logrotateは拡張子が .rpmsave のものを除外するのでlogrotateの対象にするには .rpmsave を取り除くと対象になります。

CentOS7にOpenSSLをソースコードからインストールしてみた。

CentOS7にOpenSSLをソースコードからインストールしてみました。インストールしたOpenSSLのバージョンは 3.0.15 です。作業はrootユーザーで行いました。

まずはソースを格納するディレクトリに移動します。

# cd /usr/local/src

OpenSSLのソースコードをダウンロードします。3.0.15 のところは任意のバージョンになおしてください。

# wget https://www.openssl.org/source/openssl-3.0.15.tar.gz

ダウンロードしたファイルのチェックサムを確認しておきます。オリジナルのソースファイルのチェックサムはOpenSSLのサイトで確認ができます。

# sha256sum openssl-3.0.15.tar.gz

ダウンロードしたファイルを展開します。

# tar zxvf openssl-3.0.15.tar.gz

展開後に新しく作られたディレクトリに移動します。

# cd openssl-3.0.15

config を実行します。OpenSSL3.0以降は Configure になっているようです。

# ./Configure

ただここで以下のようなエラーが出てしまいました。。


# ./Configure
Can't locate IPC/Cmd.pm in @INC (@INC contains: /usr/local/src/openssl-3.0.15/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /usr/local/src/openssl-3.0.15/external/perl/Text-Template-1.56/lib) at /usr/local/src/openssl-3.0.15/util/perl/OpenSSL/config.pm line 19.
BEGIN failed--compilation aborted at /usr/local/src/openssl-3.0.15/util/perl/OpenSSL/config.pm line 19.
Compilation failed in require at ./Configure line 23.
BEGIN failed--compilation aborted at ./Configure line 23.

どうやら perl-IPC-Cmd というパッケージが足りていないようです。ですので、このパッケージをインストールします。

# yum install perl-IPC-Cmd

インストール後に再度 Configure を実行してみたところ、うまくいきました。


# ./Configure
Configuring OpenSSL version 3.0.15 for target linux-x86_64
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile
Created include/openssl/configuration.h

**********************************************************************
***
***   OpenSSL has been successfully configured
***
***   If you encounter a problem while building, please open an
***   issue on GitHub <https://github.com/openssl/openssl/issues>	
***   and include the output from the following command:
***
***       perl configdata.pm --dump
***
***   (If you are new to OpenSSL, you might want to consult the
***   'Troubleshooting' section in the INSTALL.md file first)
***
**********************************************************************

続けて make を実行します。

# make

しばし時間がかかります。画面のログも出続けます。終わったときに成功したのかわかりづらいですが、echo $? をすると 0 となっていたので大丈夫なのでしょう。


# make
 :
かなりのログが出る
 :
/usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
    "-oMakefile" util/wrap.pl.in > "util/wrap.pl"
chmod a+x util/wrap.pl
make[1]: Leaving directory `/usr/local/src/openssl-3.0.15'
# echo $?
0

最後に make install します。

# make install

こちらもしばし時間がかかります。make install も成功なのかわかりづらいため echo $? をしてみると 0 になっているので大丈夫なのでしょう。


# make install
 :
かなりのログが出る
 :
install doc/html/man7/proxy-certificates.html -> /usr/local/share/doc/openssl/html/man7/proxy-certificates.html
install doc/html/man7/ssl.html -> /usr/local/share/doc/openssl/html/man7/ssl.html
install doc/html/man7/x509.html -> /usr/local/share/doc/openssl/html/man7/x509.html
# echo $?
0

OpenSSLのインストール先を確認します。

# which openssl
/usr/local/bin/openssl

ライブラリの状態を見てみます。

# ldd /usr/local/bin/openssl


# ldd /usr/local/bin/openssl
	linux-vdso.so.1 =>  (0x00007ffeb3985000)
	libssl.so.3 => not found
	libcrypto.so.3 => not found
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f95750cf000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9574eb3000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f9574ae4000)
	/lib64/ld-linux-x86-64.so.2 (0x000055cc48d72000)

not found となっている libssl.so.3 と libcrypto.so.3 の場所を確認します。

# find /usr/local/ -name libssl.so.3
# find /usr/local/ -name libcrypto.so.3


# find /usr/local/ -name libssl.so.3
/usr/local/lib64/libssl.so.3
/usr/local/src/openssl-3.0.15/libssl.so.3

# find /usr/local/ -name libcrypto.so.3
/usr/local/lib64/libcrypto.so.3
/usr/local/src/openssl-3.0.15/libcrypto.so.3

/usr/local/lib64 配下にライブラリがあるようなので共有ライブラリのパスを追加します。/etc/ld.so.conf.d 配下に openssl-3.0.conf というファイルを作成して /usr/local/lib64 を書き込みます。

# cd /etc/ld.so.conf.d
# vi openssl-3.0.conf

記載した内容は1行です。


# cat openssl-3.0.conf
/usr/local/lib64

システムにライブラリのパス情報を読み込ませます。

# ldconfig

システムキャッシュの内容を確認してみます。

# ldconfig -p | grep /usr/local


# ldconfig -p | grep /usr/local
	libssl.so.3 (libc6,x86-64) => /usr/local/lib64/libssl.so.3
	libssl.so (libc6,x86-64) => /usr/local/lib64/libssl.so
	libcrypto.so.3 (libc6,x86-64) => /usr/local/lib64/libcrypto.so.3
	libcrypto.so (libc6,x86-64) => /usr/local/lib64/libcrypto.so

/usr/local/lib64 配下のライブラリが読み込まれているようです。

OpenSSLのバージョンを確認してみます。

# openssl version


# openssl version
OpenSSL 3.0.15 3 Sep 2024 (Library: OpenSSL 3.0.15 3 Sep 2024)

これでインストールが完了です。