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 を取り除くと対象になります。