Nginxを公式リポジトリからインストールする方法

2022年6月17日

前提

書くこと/書かないこと

AlmaLinux8で公式リポジトリからNginxをインストールする方法について書きます。

環境

AlmaLinux release 8.4 (Electric Cheetah) ※CentOS8代替OS

さくっと

公式リポジトリを追加するため、新しいファイルを作成して以下の内容を記載して保存します。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

インストール、自動起動有効化、サービス開始、起動確認まで一気に行います。

dnf install nginx
systemctl enable nginx
systemctl start nginx
systemctl status nginx

statusがactiveであればOKです。

こってりと

nginxリポジトリの追加

まずはnginxが標準リポジトリにあるか探してみます。

# dnf list nginx
メタデータの期限切れの最終確認: 0:37:24 時間前の 2022年06月11日 08時49分33秒 に 実施しました。
利用可能なパッケージ
nginx.x86_64       1:1.14.1-9.module_el8.3.0+2165+af250afe.alma        appstream

1.14.1が見つかりましたが、これは2018年11月にリリースされたかなり古いバージョンなので、やはり公式リポジトリを公式リポジトリからインストールしようと思います。

nginxを公式リポジトリからパッケージインストールする場合、stable版とmainline版という2種類が存在します。
mainline版は最新機能やバグフィックスが取り込まれている一方、実験的な機能が含まれている場合もあり、新しいバグが潜在しているかもしれないものになるため、特に意図がなければstable版を使うことが推奨されています。

今回もstable版を利用します。

リポジトリを追加するため、/etc/yum.repos.d/の下に新しいファイルを作成し、下記を記載して保存します。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

リポジトリが利用できるか確認します。

# dnf list nginx
メタデータの期限切れの最終確認: 0:00:17 時間前の 2022年06月11日 09時34分15秒 に 実施しました。
利用可能なパッケージ
nginx.x86_64                   1:1.22.0-1.el8.ngx                   nginx-stable

1.22.0が利用できるようになりました。2022年5月24日にリリースされた最新版です。

インストール方法

リポジトリの追加ができていればインストールは簡単です。

# dnf install nginx
(省略)
インストール済み:
  nginx-1:1.22.0-1.el8.ngx.x86_64

完了しました!

これで完了です。

状態確認と基本設定

まずはバージョン情報を確認します。

# nginx -V
nginx version: nginx/1.22.0
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC)
built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
TLS SNI support enabled
configure arguments: --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-cc-opt='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

1.22.0がインストールされています。OpenSSLは1.1.1kでビルドされています。

ディレクトリ構成を見てみます。

# tree /etc/nginx/
/etc/nginx/
├─ conf.d
│   └ default.conf
├─ fastcgi_params
├─ mime.types
├─ modules -> ../../usr/lib64/nginx/modules
├─ nginx.conf
├─ scgi_params
└  uwsgi_params

設定ファイルはnginx.confとdefault.confの2つになります。
nginx.confはサービス全体の設定ファイル、default.confはサーバ(ホスト)の設定ファイルの位置付けです。
実際にはnginx.confの末尾にあるinclude /etc/nginx/conf.d/*.conf;でdefault.confを丸ごと読み込む設定になっているので、httpディレクティブ(http {})の中に書くべきものであれば、httpd.confに書いてもdefault.confに書いても、あるいはconf.dの下に別名の新しいファイルを作って書いても動作は同じです。

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

OS起動時の自動起動設定、サービス起動、起動確認までを一気に行います。

# systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
# systemctl start nginx
# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor prese>
   Active: active (running) since Sat 2022-06-11 09:56:52 JST; 4s ago
(省略)

一応プロセスも確認します。

# ps aux | grep nginx
root        4659  0.0  0.0  42856   876 ?        Ss   09:56   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx       4660  0.0  0.5  75024  5124 ?        S    09:56   0:00 nginx: worker process

起動していますのでこれでOKです。
余談ですが、ワークプロセスが一つなのはnginx.confにあるworker_processes auto;の記述によるものです。autoだとOSに割り当てられたCPU数=ワークプロセス数となります。