LinuCエヴァンジェリストの鯨井貴博@opensourcetechです。
nginx 1.19.2 + njs-0.4.3による環境作成を実施します。
OSは、以下の記事でMinimalインストールしたCentOS8を使用しています。
CentOS8のインストール - Opensourcetechブログ
CentOS8のカーネル再構築(Linux kernel 5.7.10) - Opensourcetechブログ
[root@centos8test ~]# uname -r 5.7.10 [root@centos8test ~]# cat /etc/centos-release CentOS Linux release 8.2.2004 (Core)
まず、インストール用のレポジトリファイルを作成します。
[root@centos8test ~]# cd /etc/yum.repos.d/ [root@centos8test yum.repos.d]# vi nginx.repo [root@centos8test yum.repos.d]# cat nginx.repo [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 [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
続いて、yum-utilsのインストール。
[root@centos8test yum.repos.d]# yum install yum-utils CentOS-8 - AppStream 1.8 kB/s | 4.3 kB 00:02 CentOS-8 - AppStream 3.6 MB/s | 5.8 MB 00:01 CentOS-8 - Base 2.8 kB/s | 3.9 kB 00:01 CentOS-8 - Base 1.2 MB/s | 2.2 MB 00:01 CentOS-8 - Extras 1.8 kB/s | 1.5 kB 00:00 CentOS-8 - Extras 7.8 kB/s | 7.3 kB 00:00 nginx stable repo 8.7 kB/s | 16 kB 00:01 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール中: yum-utils noarch 4.0.12-3.el8 BaseOS 66 k トランザクションの概要 ================================================================================ インストール 1 パッケージ ダウンロードサイズの合計: 66 k インストール済みのサイズ: 20 k これでよろしいですか? [y/N]: y パッケージのダウンロード: yum-utils-4.0.12-3.el8.noarch.rpm 214 kB/s | 66 kB 00:00 -------------------------------------------------------------------------------- 合計 60 kB/s | 66 kB 00:01 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : yum-utils-4.0.12-3.el8.noarch 1/1 scriptlet の実行中: yum-utils-4.0.12-3.el8.noarch 1/1 検証 : yum-utils-4.0.12-3.el8.noarch 1/1 インストール済み: yum-utils-4.0.12-3.el8.noarch 完了しました!
そして、レポジトリ「nginx-mainline」を有効化(enabled=1)します。
※レポジトリファイル作成時に予め有効にしておいても同じです。
[root@centos8test yum.repos.d]# yum-config-manager --enable nginx-mainline [root@centos8test yum.repos.d]# cat nginx.repo [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 [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
nginxのインストール。
[root@centos8test yum.repos.d]# yum install nginx nginx stable repo 3.7 kB/s | 2.9 kB 00:00 nginx mainline repo 22 kB/s | 44 kB 00:01 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール中: nginx x86_64 1:1.19.2-1.el8.ngx nginx-mainline 815 k トランザクションの概要 ================================================================================ インストール 1 パッケージ ダウンロードサイズの合計: 815 k インストール済みのサイズ: 3.7 M これでよろしいですか? [y/N]: y パッケージのダウンロード: nginx-1.19.2-1.el8.ngx.x86_64.rpm 147 kB/s | 815 kB 00:05 -------------------------------------------------------------------------------- 合計 147 kB/s | 815 kB 00:05 警告: /var/cache/dnf/nginx-mainline-f354473966140c6b/packages/nginx-1.19.2-1.el8.ngx.x86_64.rpm: ヘッダー V4 RSA/SHA1 Signature、鍵 ID 7bd9bf62: NOKEY nginx mainline repo 1.1 kB/s | 1.5 kB 00:01 GPG 鍵 0x7BD9BF62 をインポート中: Userid : "nginx signing key <signing-key@nginx.com>" Fingerprint: 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62 From : https://nginx.org/keys/nginx_signing.key これでよろしいですか? [y/N]: y 鍵のインポートに成功しました トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 scriptlet の実行中: nginx-1:1.19.2-1.el8.ngx.x86_64 1/1 インストール中 : nginx-1:1.19.2-1.el8.ngx.x86_64 1/1 scriptlet の実行中: nginx-1:1.19.2-1.el8.ngx.x86_64 1/1 ---------------------------------------------------------------------- Thanks for using nginx! Please find the official documentation for nginx here: * http://nginx.org/en/docs/ Please subscribe to nginx-announce mailing list to get the most important news about nginx: * http://nginx.org/en/support.html Commercial subscriptions for nginx are available on: * http://nginx.com/products/ ---------------------------------------------------------------------- 検証 : nginx-1:1.19.2-1.el8.ngx.x86_64 1/1 インストール済み: nginx-1:1.19.2-1.el8.ngx.x86_64 完了しました! [root@centos8test yum.repos.d]# rpm -q nginx nginx-1.19.2-1.el8.ngx.x86_64
続いて、njsのインストール。
nginxパッケージと同じレポジトリにあります。
http://nginx.org/packages/centos/8/x86_64/RPMS/
[root@centos8test yum.repos.d]# yum search nginx-module-njs メタデータの期限切れの最終確認: 0:59:22 時間前の 2020年08月12日 17時55分55秒 に 実施しました。 ======================= 名前 完全一致: nginx-module-njs ======================== nginx-module-njs.x86_64 : nginx njs dynamic modules ====================== 名前 & 概要 一致: nginx-module-njs ====================== nginx-module-njs-debuginfo.x86_64 : Debug information for package : nginx-module-njs [root@centos8test yum.repos.d]# yum install nginx-module-njs メタデータの期限切れの最終確認: 1:01:13 時間前の 2020年08月12日 17時55分55秒 に 実施しました。 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール中: nginx-module-njs x86_64 1:1.19.2.0.4.3-1.el8.ngx nginx-mainline 421 k トランザクションの概要 ================================================================================ インストール 1 パッケージ ダウンロードサイズの合計: 421 k インストール済みのサイズ: 3.4 M これでよろしいですか? [y/N]: y パッケージのダウンロード: nginx-module-njs-1.19.2.0.4.3-1.el8.ngx.x86_64. 103 kB/s | 421 kB 00:04 -------------------------------------------------------------------------------- 合計 103 kB/s | 421 kB 00:04 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : nginx-module-njs-1:1.19.2.0.4.3-1.el8.ngx.x86_64 1/1 scriptlet の実行中: nginx-module-njs-1:1.19.2.0.4.3-1.el8.ngx.x86_64 1/1 ---------------------------------------------------------------------- The njs dynamic modules for nginx have been installed. To enable these modules, add the following to /etc/nginx/nginx.conf and reload nginx: load_module modules/ngx_http_js_module.so; load_module modules/ngx_stream_js_module.so; Please refer to the modules documentation for further details: http://nginx.org/en/docs/njs/ http://nginx.org/en/docs/http/ngx_http_js_module.html http://nginx.org/en/docs/stream/ngx_stream_js_module.html ---------------------------------------------------------------------- 検証 : nginx-module-njs-1:1.19.2.0.4.3-1.el8.ngx.x86_64 1/1 インストール済み: nginx-module-njs-1:1.19.2.0.4.3-1.el8.ngx.x86_64 完了しました! [root@centos8test yum.repos.d]# rpm -q nginx-module-njs nginx-module-njs-1.19.2.0.4.3-1.el8.ngx.x86_64 root@centos8test yum.repos.d]# yum install nginx-module-njs-debuginfo メタデータの期限切れの最終確認: 1:05:02 時間前の 2020年08月12日 17時55分55秒 に 実施しました。 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール中: nginx-module-njs-debuginfo x86_64 1:1.19.2.0.4.3-1.el8.ngx nginx-mainline 3.2 M トランザクションの概要 ================================================================================ インストール 1 パッケージ ダウンロードサイズの合計: 3.2 M インストール済みのサイズ: 13 M これでよろしいですか? [y/N]: y パッケージのダウンロード: nginx-module-njs-debuginfo-1.19.2.0.4.3-1.el8.n 172 kB/s | 3.2 MB 00:19 -------------------------------------------------------------------------------- 合計 172 kB/s | 3.2 MB 00:19 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : nginx-module-njs-debuginfo-1:1.19.2.0.4.3-1.el8.ngx 1/1 scriptlet の実行中: nginx-module-njs-debuginfo-1:1.19.2.0.4.3-1.el8.ngx 1/1 検証 : nginx-module-njs-debuginfo-1:1.19.2.0.4.3-1.el8.ngx 1/1 インストール済み: nginx-module-njs-debuginfo-1:1.19.2.0.4.3-1.el8.ngx.x86_64 完了しました! [root@centos8test yum.repos.d]# rpm -q nginx-module-njs-debuginfo nginx-module-njs-debuginfo-1.19.2.0.4.3-1.el8.ngx.x86_64
njsを使うための設定。
[root@centos8test nginx]# cd /etc/nginx/ [root@centos8test nginx]# ls conf.d koi-utf mime.types nginx.conf uwsgi_params fastcgi_params koi-win modules scgi_params win-utf conf.d http.js koi-win modules scgi_params win-utf fastcgi_params koi-utf mime.types nginx.conf uwsgi_params [root@centos8test nginx]# vi nginx.conf [root@centos8test nginx]# cat nginx.conf user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; load_module modules/ngx_http_js_module.so; <------追記 events { worker_connections 1024; } http { <------追記(ここから) js_import http.js; server { listen 8000; location / { js_content http.hello; } } } <------追記(ここまで) #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; #}
そして、Javascriptファイル(Hello,world)を用意します。
[root@centos8test nginx]# vi http.js [root@centos8test nginx]# cat http.js function hello(r) { r.return(200, "Hello world!"); } export default {hello}; [root@centos8test nginx]# pwd /etc/nginx
nginxの起動。
まさかの失敗。。。
[root@centos8test nginx]# systemctl start nginx Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
どうもSELinuxが気になります。
SELinuxのログであるaudit.logを確認すると、当たりでした。
[root@centos8test nginx]# tail -f /var/log/audit/audit.log type=AVC msg=audit(1597230643.130:160): avc: denied { name_bind } for pid=1977 comm="nginx" src=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket permissive=0 type=SYSCALL msg=audit(1597230643.130:160): arch=c000003e syscall=49 success=no exit=-13 a0=8 a1=5556b1704140 a2=10 a3=7ffd399fafb0 items=0 ppid=1 pid=1977 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)ARCH=x86_64 SYSCALL=bind AUID="unset" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root" type=PROCTITLE msg=audit(1597230643.130:160): proctitle=2F7573722F7362696E2F6E67696E78002D63002F6574632F6E67696E782F6E67696E782E636F6E66 type=SERVICE_START msg=audit(1597230643.135:161): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=nginx comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'UID="root" AUID="unset"
では、SELinuxのトラブルシュート。
setroubleshootパッケージをインストールします。
これで、/var/log/messagesにSELinuxでどう対応すればいいかログ出力してくれます。
[root@centos8test nginx]# yum install setroubleshoot メタデータの期限切れの最終確認: 2:16:35 時間前の 2020年08月12日 17時55分55秒 に 実施しました。 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン Repo サイズ ================================================================================ インストール中: setroubleshoot x86_64 3.3.22-2.el8 AppStream 133 k 依存関係のインストール中: adwaita-cursor-theme noarch 3.28.0-2.el8 AppStream 647 k adwaita-icon-theme noarch 3.28.0-2.el8 AppStream 11 M at-spi2-atk x86_64 2.26.2-1.el8 AppStream 89 k at-spi2-core x86_64 2.28.0-1.el8 AppStream 169 k augeas-libs x86_64 1.12.0-5.el8 BaseOS 436 k cairo-gobject x86_64 1.15.12-3.el8 AppStream 33 k checkpolicy x86_64 2.9-1.el8 BaseOS 348 k colord-libs x86_64 1.4.2-1.el8 AppStream 236 k desktop-file-utils x86_64 0.23-8.el8 AppStream 80 k glib-networking x86_64 2.56.1-1.1.el8 BaseOS 155 k gsettings-desktop-schemas x86_64 3.32.0-4.el8 BaseOS 632 k gtk3 x86_64 3.22.30-5.el8 AppStream 4.5 M json-glib x86_64 1.4.4-1.el8 BaseOS 144 k libXtst x86_64 1.2.3-7.el8 AppStream 22 k libepoxy x86_64 1.5.3-1.el8 AppStream 225 k libgusb x86_64 0.3.0-1.el8 BaseOS 49 k libmodman x86_64 2.0.1-17.el8 BaseOS 36 k libnotify x86_64 0.7.7-5.el8 AppStream 47 k libproxy x86_64 0.4.15-5.2.el8 BaseOS 75 k libreport x86_64 2.9.5-10.el8 AppStream 498 k libreport-gtk x86_64 2.9.5-10.el8 AppStream 88 k libreport-plugin-reportuploader x86_64 2.9.5-10.el8 AppStream 46 k libreport-web x86_64 2.9.5-10.el8 AppStream 39 k libsoup x86_64 2.62.3-1.el8 BaseOS 424 k libtar x86_64 1.2.20-15.el8 AppStream 42 k libwayland-client x86_64 1.17.0-1.el8 AppStream 39 k libwayland-cursor x86_64 1.17.0-1.el8 AppStream 26 k libwayland-egl x86_64 1.17.0-1.el8 AppStream 19 k libxkbcommon x86_64 0.9.1-1.el8 AppStream 116 k lz4 x86_64 1.8.1.2-4.el8 BaseOS 92 k policycoreutils-python-utils noarch 2.9-9.el8 BaseOS 251 k python3-audit x86_64 3.0-0.17.20191104git1c2f876.el8 BaseOS 86 k python3-cairo x86_64 1.16.3-6.el8 AppStream 90 k python3-gobject x86_64 3.28.3-1.el8 AppStream 25 k python3-libreport x86_64 2.9.5-10.el8 AppStream 58 k python3-libsemanage x86_64 2.9-2.el8 BaseOS 127 k python3-policycoreutils noarch 2.9-9.el8 BaseOS 2.2 M python3-pydbus noarch 0.6.0-5.el8 AppStream 53 k python3-setools x86_64 4.2.2-2.el8 BaseOS 601 k python3-systemd x86_64 234-8.el8 AppStream 81 k rest x86_64 0.8.1-2.el8 AppStream 70 k satyr x86_64 0.26-2.el8 AppStream 114 k setroubleshoot-plugins noarch 3.3.11-2.el8 AppStream 360 k setroubleshoot-server x86_64 3.3.22-2.el8 AppStream 398 k xdg-utils noarch 1.1.2-5.el8 AppStream 84 k xkeyboard-config noarch 2.28-1.el8 AppStream 782 k xmlrpc-c x86_64 1.51.0-5.el8 BaseOS 212 k xmlrpc-c-client x86_64 1.51.0-5.el8 BaseOS 40 k 弱い依存関係のインストール中: abattis-cantarell-fonts noarch 0.0.25-4.el8 AppStream 155 k dconf x86_64 0.28.0-3.el8 AppStream 109 k トランザクションの概要 ================================================================================ インストール 51 パッケージ ダウンロードサイズの合計: 27 M インストール済みのサイズ: 80 M これでよろしいですか? [y/N]: y パッケージのダウンロード: (1/51): abattis-cantarell-fonts-0.0.25-4.el8.no 479 kB/s | 155 kB 00:00 (2/51): at-spi2-atk-2.26.2-1.el8.x86_64.rpm 1.7 MB/s | 89 kB 00:00 (3/51): at-spi2-core-2.28.0-1.el8.x86_64.rpm 2.5 MB/s | 169 kB 00:00 (4/51): cairo-gobject-1.15.12-3.el8.x86_64.rpm 1.9 MB/s | 33 kB 00:00 (5/51): adwaita-cursor-theme-3.28.0-2.el8.noarc 1.2 MB/s | 647 kB 00:00 (6/51): colord-libs-1.4.2-1.el8.x86_64.rpm 2.5 MB/s | 236 kB 00:00 (7/51): desktop-file-utils-0.23-8.el8.x86_64.rp 1.9 MB/s | 80 kB 00:00 (8/51): dconf-0.28.0-3.el8.x86_64.rpm 1.1 MB/s | 109 kB 00:00 (9/51): libXtst-1.2.3-7.el8.x86_64.rpm 1.4 MB/s | 22 kB 00:00 (10/51): libepoxy-1.5.3-1.el8.x86_64.rpm 1.4 MB/s | 225 kB 00:00 (11/51): libnotify-0.7.7-5.el8.x86_64.rpm 1.1 MB/s | 47 kB 00:00 (12/51): libreport-2.9.5-10.el8.x86_64.rpm 1.6 MB/s | 498 kB 00:00 (13/51): libreport-gtk-2.9.5-10.el8.x86_64.rpm 1.6 MB/s | 88 kB 00:00 (14/51): libreport-plugin-reportuploader-2.9.5- 1.3 MB/s | 46 kB 00:00 (15/51): libreport-web-2.9.5-10.el8.x86_64.rpm 1.5 MB/s | 39 kB 00:00 (16/51): libtar-1.2.20-15.el8.x86_64.rpm 1.6 MB/s | 42 kB 00:00 (17/51): libwayland-client-1.17.0-1.el8.x86_64. 1.6 MB/s | 39 kB 00:00 (18/51): libwayland-cursor-1.17.0-1.el8.x86_64. 854 kB/s | 26 kB 00:00 (19/51): libwayland-egl-1.17.0-1.el8.x86_64.rpm 1.0 MB/s | 19 kB 00:00 (20/51): libxkbcommon-0.9.1-1.el8.x86_64.rpm 1.8 MB/s | 116 kB 00:00 (21/51): python3-cairo-1.16.3-6.el8.x86_64.rpm 1.8 MB/s | 90 kB 00:00 (22/51): python3-gobject-3.28.3-1.el8.x86_64.rp 1.0 MB/s | 25 kB 00:00 (23/51): python3-libreport-2.9.5-10.el8.x86_64. 939 kB/s | 58 kB 00:00 (24/51): python3-pydbus-0.6.0-5.el8.noarch.rpm 1.3 MB/s | 53 kB 00:00 (25/51): python3-systemd-234-8.el8.x86_64.rpm 1.4 MB/s | 81 kB 00:00 (26/51): rest-0.8.1-2.el8.x86_64.rpm 1.5 MB/s | 70 kB 00:00 (27/51): satyr-0.26-2.el8.x86_64.rpm 2.1 MB/s | 114 kB 00:00 (28/51): setroubleshoot-3.3.22-2.el8.x86_64.rpm 1.8 MB/s | 133 kB 00:00 (29/51): setroubleshoot-plugins-3.3.11-2.el8.no 2.0 MB/s | 360 kB 00:00 (30/51): setroubleshoot-server-3.3.22-2.el8.x86 2.2 MB/s | 398 kB 00:00 (31/51): xdg-utils-1.1.2-5.el8.noarch.rpm 1.5 MB/s | 84 kB 00:00 (32/51): gtk3-3.22.30-5.el8.x86_64.rpm 2.2 MB/s | 4.5 MB 00:02 (33/51): xkeyboard-config-2.28-1.el8.noarch.rpm 1.7 MB/s | 782 kB 00:00 (34/51): checkpolicy-2.9-1.el8.x86_64.rpm 614 kB/s | 348 kB 00:00 (35/51): augeas-libs-1.12.0-5.el8.x86_64.rpm 533 kB/s | 436 kB 00:00 (36/51): glib-networking-2.56.1-1.1.el8.x86_64. 478 kB/s | 155 kB 00:00 (37/51): adwaita-icon-theme-3.28.0-2.el8.noarch 3.0 MB/s | 11 MB 00:03 (38/51): json-glib-1.4.4-1.el8.x86_64.rpm 382 kB/s | 144 kB 00:00 (39/51): libgusb-0.3.0-1.el8.x86_64.rpm 181 kB/s | 49 kB 00:00 (40/51): libmodman-2.0.1-17.el8.x86_64.rpm 136 kB/s | 36 kB 00:00 (41/51): gsettings-desktop-schemas-3.32.0-4.el8 666 kB/s | 632 kB 00:00 (42/51): libproxy-0.4.15-5.2.el8.x86_64.rpm 260 kB/s | 75 kB 00:00 (43/51): policycoreutils-python-utils-2.9-9.el8 1.3 MB/s | 251 kB 00:00 (44/51): libsoup-2.62.3-1.el8.x86_64.rpm 1.1 MB/s | 424 kB 00:00 (45/51): lz4-1.8.1.2-4.el8.x86_64.rpm 303 kB/s | 92 kB 00:00 (46/51): python3-audit-3.0-0.17.20191104git1c2f 771 kB/s | 86 kB 00:00 (47/51): python3-libsemanage-2.9-2.el8.x86_64.r 416 kB/s | 127 kB 00:00 (48/51): xmlrpc-c-1.51.0-5.el8.x86_64.rpm 646 kB/s | 212 kB 00:00 (49/51): python3-setools-4.2.2-2.el8.x86_64.rpm 656 kB/s | 601 kB 00:00 (50/51): xmlrpc-c-client-1.51.0-5.el8.x86_64.rp 73 kB/s | 40 kB 00:00 (51/51): python3-policycoreutils-2.9-9.el8.noar 1.7 MB/s | 2.2 MB 00:01 -------------------------------------------------------------------------------- 合計 3.1 MB/s | 27 MB 00:08 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : augeas-libs-1.12.0-5.el8.x86_64 1/51 scriptlet の実行中: augeas-libs-1.12.0-5.el8.x86_64 1/51 インストール中 : satyr-0.26-2.el8.x86_64 2/51 scriptlet の実行中: satyr-0.26-2.el8.x86_64 2/51 インストール中 : libtar-1.2.20-15.el8.x86_64 3/51 インストール中 : xmlrpc-c-1.51.0-5.el8.x86_64 4/51 インストール中 : cairo-gobject-1.15.12-3.el8.x86_64 5/51 インストール中 : xmlrpc-c-client-1.51.0-5.el8.x86_64 6/51 インストール中 : python3-audit-3.0-0.17.20191104git1c2f876.el8.x86 7/51 インストール中 : libwayland-client-1.17.0-1.el8.x86_64 8/51 インストール中 : desktop-file-utils-0.23-8.el8.x86_64 9/51 インストール中 : xdg-utils-1.1.2-5.el8.noarch 10/51 インストール中 : libwayland-cursor-1.17.0-1.el8.x86_64 11/51 インストール中 : python3-setools-4.2.2-2.el8.x86_64 12/51 インストール中 : python3-libsemanage-2.9-2.el8.x86_64 13/51 インストール中 : lz4-1.8.1.2-4.el8.x86_64 14/51 インストール中 : libreport-2.9.5-10.el8.x86_64 15/51 インストール中 : python3-libreport-2.9.5-10.el8.x86_64 16/51 インストール中 : libmodman-2.0.1-17.el8.x86_64 17/51 scriptlet の実行中: libmodman-2.0.1-17.el8.x86_64 17/51 インストール中 : libproxy-0.4.15-5.2.el8.x86_64 18/51 scriptlet の実行中: libproxy-0.4.15-5.2.el8.x86_64 18/51 インストール中 : libreport-web-2.9.5-10.el8.x86_64 19/51 インストール中 : libreport-plugin-reportuploader-2.9.5-10.el8.x86_ 20/51 インストール中 : libgusb-0.3.0-1.el8.x86_64 21/51 インストール中 : colord-libs-1.4.2-1.el8.x86_64 22/51 インストール中 : json-glib-1.4.4-1.el8.x86_64 23/51 インストール中 : checkpolicy-2.9-1.el8.x86_64 24/51 インストール中 : python3-policycoreutils-2.9-9.el8.noarch 25/51 インストール中 : policycoreutils-python-utils-2.9-9.el8.noarch 26/51 インストール中 : xkeyboard-config-2.28-1.el8.noarch 27/51 インストール中 : libxkbcommon-0.9.1-1.el8.x86_64 28/51 インストール中 : python3-systemd-234-8.el8.x86_64 29/51 インストール中 : python3-pydbus-0.6.0-5.el8.noarch 30/51 インストール中 : python3-cairo-1.16.3-6.el8.x86_64 31/51 インストール中 : python3-gobject-3.28.3-1.el8.x86_64 32/51 インストール中 : setroubleshoot-plugins-3.3.11-2.el8.noarch 33/51 scriptlet の実行中: setroubleshoot-server-3.3.22-2.el8.x86_64 34/51 インストール中 : setroubleshoot-server-3.3.22-2.el8.x86_64 34/51 scriptlet の実行中: setroubleshoot-server-3.3.22-2.el8.x86_64 34/51 インストール中 : libwayland-egl-1.17.0-1.el8.x86_64 35/51 インストール中 : libnotify-0.7.7-5.el8.x86_64 36/51 scriptlet の実行中: libnotify-0.7.7-5.el8.x86_64 36/51 インストール中 : libepoxy-1.5.3-1.el8.x86_64 37/51 インストール中 : libXtst-1.2.3-7.el8.x86_64 38/51 インストール中 : at-spi2-core-2.28.0-1.el8.x86_64 39/51 scriptlet の実行中: at-spi2-core-2.28.0-1.el8.x86_64 39/51 インストール中 : at-spi2-atk-2.26.2-1.el8.x86_64 40/51 scriptlet の実行中: at-spi2-atk-2.26.2-1.el8.x86_64 40/51 インストール中 : dconf-0.28.0-3.el8.x86_64 41/51 インストール中 : adwaita-cursor-theme-3.28.0-2.el8.noarch 42/51 インストール中 : adwaita-icon-theme-3.28.0-2.el8.noarch 43/51 インストール中 : abattis-cantarell-fonts-0.0.25-4.el8.noarch 44/51 インストール中 : gsettings-desktop-schemas-3.32.0-4.el8.x86_64 45/51 インストール中 : glib-networking-2.56.1-1.1.el8.x86_64 46/51 インストール中 : libsoup-2.62.3-1.el8.x86_64 47/51 インストール中 : rest-0.8.1-2.el8.x86_64 48/51 scriptlet の実行中: rest-0.8.1-2.el8.x86_64 48/51 インストール中 : gtk3-3.22.30-5.el8.x86_64 49/51 インストール中 : libreport-gtk-2.9.5-10.el8.x86_64 50/51 インストール中 : setroubleshoot-3.3.22-2.el8.x86_64 51/51 scriptlet の実行中: dconf-0.28.0-3.el8.x86_64 51/51 scriptlet の実行中: setroubleshoot-3.3.22-2.el8.x86_64 51/51 scriptlet の実行中: desktop-file-utils-0.23-8.el8.x86_64 51/51 scriptlet の実行中: adwaita-icon-theme-3.28.0-2.el8.noarch 51/51 検証 : abattis-cantarell-fonts-0.0.25-4.el8.noarch 1/51 検証 : adwaita-cursor-theme-3.28.0-2.el8.noarch 2/51 検証 : adwaita-icon-theme-3.28.0-2.el8.noarch 3/51 検証 : at-spi2-atk-2.26.2-1.el8.x86_64 4/51 検証 : at-spi2-core-2.28.0-1.el8.x86_64 5/51 検証 : cairo-gobject-1.15.12-3.el8.x86_64 6/51 検証 : colord-libs-1.4.2-1.el8.x86_64 7/51 検証 : dconf-0.28.0-3.el8.x86_64 8/51 検証 : desktop-file-utils-0.23-8.el8.x86_64 9/51 検証 : gtk3-3.22.30-5.el8.x86_64 10/51 検証 : libXtst-1.2.3-7.el8.x86_64 11/51 検証 : libepoxy-1.5.3-1.el8.x86_64 12/51 検証 : libnotify-0.7.7-5.el8.x86_64 13/51 検証 : libreport-2.9.5-10.el8.x86_64 14/51 検証 : libreport-gtk-2.9.5-10.el8.x86_64 15/51 検証 : libreport-plugin-reportuploader-2.9.5-10.el8.x86_ 16/51 検証 : libreport-web-2.9.5-10.el8.x86_64 17/51 検証 : libtar-1.2.20-15.el8.x86_64 18/51 検証 : libwayland-client-1.17.0-1.el8.x86_64 19/51 検証 : libwayland-cursor-1.17.0-1.el8.x86_64 20/51 検証 : libwayland-egl-1.17.0-1.el8.x86_64 21/51 検証 : libxkbcommon-0.9.1-1.el8.x86_64 22/51 検証 : python3-cairo-1.16.3-6.el8.x86_64 23/51 検証 : python3-gobject-3.28.3-1.el8.x86_64 24/51 検証 : python3-libreport-2.9.5-10.el8.x86_64 25/51 検証 : python3-pydbus-0.6.0-5.el8.noarch 26/51 検証 : python3-systemd-234-8.el8.x86_64 27/51 検証 : rest-0.8.1-2.el8.x86_64 28/51 検証 : satyr-0.26-2.el8.x86_64 29/51 検証 : setroubleshoot-3.3.22-2.el8.x86_64 30/51 検証 : setroubleshoot-plugins-3.3.11-2.el8.noarch 31/51 検証 : setroubleshoot-server-3.3.22-2.el8.x86_64 32/51 検証 : xdg-utils-1.1.2-5.el8.noarch 33/51 検証 : xkeyboard-config-2.28-1.el8.noarch 34/51 検証 : augeas-libs-1.12.0-5.el8.x86_64 35/51 検証 : checkpolicy-2.9-1.el8.x86_64 36/51 検証 : glib-networking-2.56.1-1.1.el8.x86_64 37/51 検証 : gsettings-desktop-schemas-3.32.0-4.el8.x86_64 38/51 検証 : json-glib-1.4.4-1.el8.x86_64 39/51 検証 : libgusb-0.3.0-1.el8.x86_64 40/51 検証 : libmodman-2.0.1-17.el8.x86_64 41/51 検証 : libproxy-0.4.15-5.2.el8.x86_64 42/51 検証 : libsoup-2.62.3-1.el8.x86_64 43/51 検証 : lz4-1.8.1.2-4.el8.x86_64 44/51 検証 : policycoreutils-python-utils-2.9-9.el8.noarch 45/51 検証 : python3-audit-3.0-0.17.20191104git1c2f876.el8.x86 46/51 検証 : python3-libsemanage-2.9-2.el8.x86_64 47/51 検証 : python3-policycoreutils-2.9-9.el8.noarch 48/51 検証 : python3-setools-4.2.2-2.el8.x86_64 49/51 検証 : xmlrpc-c-1.51.0-5.el8.x86_64 50/51 検証 : xmlrpc-c-client-1.51.0-5.el8.x86_64 51/51 インストール済み: abattis-cantarell-fonts-0.0.25-4.el8.noarch adwaita-cursor-theme-3.28.0-2.el8.noarch adwaita-icon-theme-3.28.0-2.el8.noarch at-spi2-atk-2.26.2-1.el8.x86_64 at-spi2-core-2.28.0-1.el8.x86_64 augeas-libs-1.12.0-5.el8.x86_64 cairo-gobject-1.15.12-3.el8.x86_64 checkpolicy-2.9-1.el8.x86_64 colord-libs-1.4.2-1.el8.x86_64 dconf-0.28.0-3.el8.x86_64 desktop-file-utils-0.23-8.el8.x86_64 glib-networking-2.56.1-1.1.el8.x86_64 gsettings-desktop-schemas-3.32.0-4.el8.x86_64 gtk3-3.22.30-5.el8.x86_64 json-glib-1.4.4-1.el8.x86_64 libXtst-1.2.3-7.el8.x86_64 libepoxy-1.5.3-1.el8.x86_64 libgusb-0.3.0-1.el8.x86_64 libmodman-2.0.1-17.el8.x86_64 libnotify-0.7.7-5.el8.x86_64 libproxy-0.4.15-5.2.el8.x86_64 libreport-2.9.5-10.el8.x86_64 libreport-gtk-2.9.5-10.el8.x86_64 libreport-plugin-reportuploader-2.9.5-10.el8.x86_64 libreport-web-2.9.5-10.el8.x86_64 libsoup-2.62.3-1.el8.x86_64 libtar-1.2.20-15.el8.x86_64 libwayland-client-1.17.0-1.el8.x86_64 libwayland-cursor-1.17.0-1.el8.x86_64 libwayland-egl-1.17.0-1.el8.x86_64 libxkbcommon-0.9.1-1.el8.x86_64 lz4-1.8.1.2-4.el8.x86_64 policycoreutils-python-utils-2.9-9.el8.noarch python3-audit-3.0-0.17.20191104git1c2f876.el8.x86_64 python3-cairo-1.16.3-6.el8.x86_64 python3-gobject-3.28.3-1.el8.x86_64 python3-libreport-2.9.5-10.el8.x86_64 python3-libsemanage-2.9-2.el8.x86_64 python3-policycoreutils-2.9-9.el8.noarch python3-pydbus-0.6.0-5.el8.noarch python3-setools-4.2.2-2.el8.x86_64 python3-systemd-234-8.el8.x86_64 rest-0.8.1-2.el8.x86_64 satyr-0.26-2.el8.x86_64 setroubleshoot-3.3.22-2.el8.x86_64 setroubleshoot-plugins-3.3.11-2.el8.noarch setroubleshoot-server-3.3.22-2.el8.x86_64 xdg-utils-1.1.2-5.el8.noarch xkeyboard-config-2.28-1.el8.noarch xmlrpc-c-1.51.0-5.el8.x86_64 xmlrpc-c-client-1.51.0-5.el8.x86_64 完了しました!
おや、/var/logを確認すると、messagesがありません。
これはおそらく、Minimalインストールのため、rsyslogがない予感。
インストールして、起動します。
[root@centos8test nginx]# ls /var/log/ anaconda/ dnf.log lastlog tuned/ audit/ dnf.rpm.log nginx/ wtmp btmp firewalld private/ dnf.librepo.log hawkey.log sssd/ [root@centos8test nginx]# yum install rsyslog メタデータの期限切れの最終確認: 2:20:26 時間前の 2020年08月12日 17時55分55秒 に 実施しました。 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール中: rsyslog x86_64 8.1911.0-3.el8 AppStream 730 k 依存関係のインストール中: libestr x86_64 0.1.10-1.el8 AppStream 27 k libfastjson x86_64 0.99.8-2.el8 AppStream 37 k logrotate x86_64 3.14.0-3.el8 BaseOS 86 k トランザクションの概要 ================================================================================ インストール 4 パッケージ ダウンロードサイズの合計: 880 k インストール済みのサイズ: 2.6 M これでよろしいですか? [y/N]: y パッケージのダウンロード: (1/4): libestr-0.1.10-1.el8.x86_64.rpm 103 kB/s | 27 kB 00:00 (2/4): libfastjson-0.99.8-2.el8.x86_64.rpm 87 kB/s | 37 kB 00:00 (3/4): rsyslog-8.1911.0-3.el8.x86_64.rpm 1.2 MB/s | 730 kB 00:00 (4/4): logrotate-3.14.0-3.el8.x86_64.rpm 195 kB/s | 86 kB 00:00 -------------------------------------------------------------------------------- 合計 443 kB/s | 880 kB 00:01 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 scriptlet の実行中: logrotate-3.14.0-3.el8.x86_64 1/4 インストール中 : logrotate-3.14.0-3.el8.x86_64 1/4 インストール中 : libfastjson-0.99.8-2.el8.x86_64 2/4 scriptlet の実行中: libfastjson-0.99.8-2.el8.x86_64 2/4 インストール中 : libestr-0.1.10-1.el8.x86_64 3/4 scriptlet の実行中: libestr-0.1.10-1.el8.x86_64 3/4 インストール中 : rsyslog-8.1911.0-3.el8.x86_64 4/4 scriptlet の実行中: rsyslog-8.1911.0-3.el8.x86_64 4/4 検証 : libestr-0.1.10-1.el8.x86_64 1/4 検証 : libfastjson-0.99.8-2.el8.x86_64 2/4 検証 : rsyslog-8.1911.0-3.el8.x86_64 3/4 検証 : logrotate-3.14.0-3.el8.x86_64 4/4 インストール済み: libestr-0.1.10-1.el8.x86_64 libfastjson-0.99.8-2.el8.x86_64 logrotate-3.14.0-3.el8.x86_64 rsyslog-8.1911.0-3.el8.x86_64 完了しました! [root@centos8test nginx]# ls /var/log/ anaconda dnf.librepo.log firewalld maillog private sssd audit dnf.log hawkey.log messages secure tuned btmp dnf.rpm.log lastlog nginx spooler wtmp [root@centos8test nginx]# systemctl start rsyslog [root@centos8test nginx]# systemctl status rsyslog ● rsyslog.service - System Logging Service Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor pre> Active: active (running) since Wed 2020-08-12 20:18:07 JST; 3s ago Docs: man:rsyslogd(8) https://www.rsyslog.com/doc/ Main PID: 2852 (rsyslogd) Tasks: 3 (limit: 12184) Memory: 4.7M CGroup: /system.slice/rsyslog.service mq2852 /usr/sbin/rsyslogd -n 8月 12 20:18:07 centos8test systemd[1]: Starting System Logging Service... 8月 12 20:18:07 centos8test rsyslogd[2852]: [origin software="rsyslogd" swVers> 8月 12 20:18:07 centos8test systemd[1]: Started System Logging Service. 8月 12 20:18:07 centos8test rsyslogd[2852]: imjournal: No statefile exists, /v> 8月 12 20:18:07 centos8test rsyslogd[2852]: imjournal: journal files changed, >
これでSELinuxのトラブルシュート準備はOK。
tail -fで出力されるログを確認しつつ、systemctl start nginxを実行します。
[root@centos8test nginx]# tail -f /var/log/messages . . . 省略 . . . Aug 12 20:18:49 centos8test systemd[1]: Starting nginx - high performance web server... Aug 12 20:18:49 centos8test nginx[2862]: nginx: [emerg] bind() to 0.0.0.0:8000 failed (13: Permission denied) Aug 12 20:18:49 centos8test systemd[1]: nginx.service: Control process exited, code=exited status=1 Aug 12 20:18:49 centos8test systemd[1]: nginx.service: Failed with result 'exit-code'. Aug 12 20:18:49 centos8test systemd[1]: Failed to start nginx - high performance web server. Aug 12 20:18:49 centos8test dbus-daemon[689]: [system] Activating service name='org.fedoraproject.Setroubleshootd' requested by ':1.52' (uid=0 pid=2035 comm="/usr/sbin/sedispatch " label="system_u:system_r:auditd_t:s0") (using servicehelper) Aug 12 20:18:49 centos8test dbus-daemon[2865]: [system] Failed to reset fd limit before activating service: org.freedesktop.DBus.Error.AccessDenied: Failed to restore old fd limit: Operation not permitted Aug 12 20:18:51 centos8test dbus-daemon[689]: [system] Successfully activated service 'org.fedoraproject.Setroubleshootd' Aug 12 20:18:55 centos8test setroubleshoot[2865]: SELinux is preventing /usr/sbin/nginx from name_bind access on the tcp_socket port 8000. For complete SELinux messages run: sealert -l 9b349b35-efad-4afc-b848-fa6fe4fafdd1 Aug 12 20:18:55 centos8test platform-python[2865]: SELinux is preventing /usr/sbin/nginx from name_bind access on the tcp_socket port 8000.#012#012***** Plugin catchall (100. confidence) suggests **************************#012#012If you believe that nginx should be allowed name_bind access on the port 8000 tcp_socket by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c 'nginx' --raw | audit2allow -M my-nginx#012# semodule -X 300 -i my-nginx.pp#012
「ealert -l 9b349b35-efad-4afc-b848-fa6fe4fafdd1」を実行して見ろとありますね。
また、その下の行を見ると、TCP8000番ポートの利用がnginxで許可されていないことも確認できますね。
なので、それを許可します。
[root@centos8test nginx]# sealert -l 9b349b35-efad-4afc-b848-fa6fe4fafdd1 SELinux により、/usr/sbin/nginx による name_bind アクセスが、tcp_socket port 8000 で拒否されました。 ***** プラグイン catchall (100. 信頼性) による示唆**************************************** nginx に、 port 8000 tcp_socket の name_bind アクセスがデフォルトで許可されるべ きと考える場合。 このようにします: バグとして報告してください。 ローカルのポリシーモジュールを生成すると、 このアクセスを許可することができます。 そして、以下を実行します: 以下を実行して、このアクセスを許可します: # ausearch -c 'nginx' --raw | audit2allow -M my-nginx <---------これを実行しろといっています # semodule -X 300 -i my-nginx.pp <---------これを実行しろといっています 追加情報: ソースコンテキスト system_u:system_r:httpd_t:s0 ターゲットコンテキスト system_u:object_r:soundd_port_t:s0 ターゲットオブジェクト port 8000 [ tcp_socket ] ソース nginx ソースパス /usr/sbin/nginx ポート 8000 ホスト centos8test ソース RPM パッケージ nginx-1.19.2-1.el8.ngx.x86_64 ターゲット RPM パッケージ ポリシー RPM selinux-policy-3.14.3-41.el8.noarch Selinux 有効化 True ポリシータイプ targeted 強制モード Enforcing ホスト名 centos8test プラットフォーム Linux centos8test 5.7.10 #2 SMP Thu Jul 23 23:00:48 JST 2020 x86_64 x86_64 通知カウント 2 最初の画面 2020-08-12 20:17:48 JST 最後の画面 2020-08-12 20:18:49 JST ローカル ID 9b349b35-efad-4afc-b848-fa6fe4fafdd1 生の監査メッセージ type=AVC msg=audit(1597231129.873:234): avc: denied { name_bind } for pid=2862 comm="nginx" src=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket permissive=0 type=SYSCALL msg=audit(1597231129.873:234): arch=x86_64 syscall=bind success=no exit=EACCES a0=8 a1=564e534d1140 a2=10 a3=7ffcb4e0e600 items=0 ppid=1 pid=2862 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=nginx exe=/usr/sbin/nginx subj=system_u:system_r:httpd_t:s0 key=(null) Hash: nginx,httpd_t,soundd_port_t,tcp_socket,name_bind
2つのコマンドを実行します。
[root@centos8test nginx]# ausearch -c 'nginx' --raw | audit2allow -M my-nginx ******************** 重要 *********************** このポリシーパッケージを有効にするには、以下を実行して下さい: semodule -i my-nginx.pp [root@centos8test nginx]# semodule -X 300 -i my-nginx.pp
改めて、nginxの起動。
今度は出来ました!
[root@centos8test nginx]# systemctl start nginx [root@centos8test nginx]# systemctl status nginx ● nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor pres> Active: active (running) since Wed 2020-08-12 20:27:00 JST; 9s ago Docs: http://nginx.org/en/docs/ Process: 2891 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited> Main PID: 2892 (nginx) Tasks: 2 (limit: 12184) Memory: 2.2M CGroup: /system.slice/nginx.service tq2892 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf mq2893 nginx: worker process 8月 12 20:27:00 centos8test systemd[1]: Starting nginx - high performance web > 8月 12 20:27:00 centos8test systemd[1]: nginx.service: Can't open PID file /va> 8月 12 20:27:00 centos8test systemd[1]: Started nginx - high performance web s> [root@centos8test nginx]#
仕上げは、ファイアウォール(firewalld)。
TCP8000番ポートを開放します。
[root@centos8test nginx]# firewall-cmd --list-all --zone=public --permanent public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@centos8test nginx]# firewall-cmd --add-port=8000/tcp --zone=public --perma nent success [root@centos8test nginx]# systemctel reload firewalld [root@centos8test nginx]# firewall-cmd --list-all --zone=public --permanent public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client ssh ports: 8000/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
最後は、クライアントからアクセスしての確認です。
curlコマンドでアクセスしても、OKですね。
[root@centos8test nginx]# curl http://192.168.1.211:8000 Hello world!
おわりに
nginx + njsですが、結構簡単に実行することが出来ました。
なお、SELinuxとファイアウォール(firewalld)を無効化してトラブルシュートを簡素化したい場合、
setenforce 0(一時的なSELinuxのログのみモードへの変更)とsystemctl stop firewalld(firewalldの停止)で対応できます。
その他、以下の本家サイトに色々なサンプルがあるので役に立ちます。
https://nginx.org/en/docs/njs/examples.html
以上、nginx 1.19.2 + njs-0.4.3の環境構築 on CentOS8でした!!!!!!!