2019-11-26

[CentOS 8] Eginx の設定

Nginx /ˌɛndʒɪnˈɛks/ は、フリーでオープンソースな Web サーバです。処理性能・高い並行性・少ないメモリ使用量に焦点を当てて開発されており、HTTP, HTTPS, SMTP, POP3, IMAPリバースプロキシの機能や、ロードバランサHTTP キャッシュなどの機能も持っています。

Wikipedia より抜粋・編集

W3Techs の Web サーバーの利用状況調査(Usage Statistics and Market Share of Web Servers)によると、Nginx は首位の Apache HTTP Server に次いで二番目に多く使われている Web サーバです。2019 年 11 月のレポートでは Apache が 43.0%、Eginx が 30.7% という利用状況でした。

動機

Linux を使い始めて 20 年以上経ちますが、ずっと Apache HTTP Server を使ってきました。

Web サーバーの設定についての記事をインターネットで検索すると、Nginx を扱っている記事が多くなってきたことを実感しますが、自分が Web サーバーを使う用途では高負荷下での利用がないので様子見を決め込んでいました。ところが最近、実務で Apache のロードバランサが高負荷下で効果的に動作しないことを経験して、高負荷下での動作に強いと言われる Nginx に興味を持つようになりました。

そこで、自宅で 24 時間運用を始めた CentOS 8 のサーバーに Nginx をインストールしましたので、その設定内容を備忘録にしました

使用した OS は前述のとおり、CentOS 8 です。

OS
CentOS Linux release 8.0.1905 (Core) x86_64

Nginx のインストール

CentOS で Nginx の rpm パッケージを利用する方法は二つあります。

一つ目はもちろん CentOS 公式のパッケージをインストールする方法です。Nginx のバージョンは最新ではありません。しかし、エンタープライズ用途で使用しており、パッケージのバージョンアップで生じるかもしれない影響を避けたい場合にはこの方法がオススメです。

もうひとつは、Nginx のサイトで公開されている最新の rpm パッケージをインストールする方法です。

今回は、家庭内 LAN で稼働しているサーバーが対象なので、Nginx の勉強も兼ねて最新の Eginx を使うことにしました。

レポジトリ設定用の RPM パッケージ

参考サイト [1] は Nginx のサイトですが、ここに dnf/yum 用のレポジトリ設定の方法が記載されています。nginx.repo といった名前でファイルを生成して、参考サイト [1] に記載されている内容をコピペ、所定のディレクトリ /etc/yum.repos.d/ に保存するだけです。難しい操作ではありませんが、なにかの折に毎回同じ作業するのは面倒です。もしかすると、既にどなたかが作っていて、それを知らないのは自分だけなのかもしれませんが、nginx.repo をインストールする RPM ファイルを作ってしまいました [2]

※ CentOS 7用には、同等のパッケージが Nginx のサイトに用意されています。→ http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

この RPM ファイルをダウンロード、インストールしてから Nginx をインストールすることにします。

まず上記からダウンロードした nginx-repo RPM パッケージをインストールします。

$ sudo dnf install nginx-repo-1.0-1.el8.noarch.rpm

安定板/開発版のレポジトリ選択

参考サイト [1] に示されている dnf/yum 用のレポジトリ設定では、Nginx の stable 版(安定板)と mainline 版(開発版)のレポジトリの設定が記載されていますが、stable 版(安定板)のレポジトリだけ有効になっています。mainline 版のレポジトリも有効にしたい場合は、インストールされた /etc/yum.repos.d/nginx.repo を直接変更しても良いのですが、yum-config-manager コマンドを使って変更することもできます。

Nginx のバージョン番号

Nginx のバージョンは X.Y.Z(X, Y, Z は整数) という 3 つの番号で定義され、X はメインバージョン、 Y はマイナーバージョン、Z はバグフィックスなどのパッチバージョンと捉えることができます。さらに Y の番号の偶奇で安定板と開発版に区別されています。Y が更新されるタイミングは毎年 4 月であるとのことです [3]

stable
安定版:Y は常に偶数で、前の開発版の最後の版をフォークします。mainline で追加された機能は、後になって追加されます。
mainline
開発版:Y は常に奇数で安定板の Y よりひとつ大きい整数になります。4–6 週間の頻度でリリースされ、.Z の部分が更新されます。

CentOS の場合、yum-config-managerdnf-utils というパッケージに含まれていますので、これをインストールして、mainline 版のレポジトリを有効にすることにします。

$ sudo dnf install dnf-utils
...
(途中省略)
...
インストール済み:
  dnf-utils-4.0.2.2-3.el8.noarch                                                

完了しました!
$ sudo yum-config-manager --enable nginx-mainline

mainline 版のバージョン番号は stable 版より大きいので、最新のパッケージをインストールする場合、常に mainline 版の nginx が選択されることになります。

Nginx パッケージのインストール

準備が整ったので、Nginx をインストールします。最初のインストール時には GPG 鍵がインポートされます。

$ sudo dnf install nginx
...
(途中省略)
...
トランザクションの概要
==============================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 800 k
インストール済みのサイズ: 2.9 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード中です:
nginx-1.17.6-1.el8.ngx.x86_64.rpm                             185 kB/s | 800 kB     00:04    
----------------------------------------------------------------------------------------------
合計                                                          185 kB/s | 800 kB     00:04     
警告: /var/cache/dnf/nginx-mainline-f354473966140c6b/packages/nginx-1.17.6-1.el8.ngx.x86_64.rpm:
 ヘッダー V4 RSA/SHA1 Signature、鍵 ID 7bd9bf62: NOKEY
nginx mainline repo                                           775  B/s | 1.5 kB     00:02    
GPG 鍵 0x7BD9BF62 をインポート中:
 Userid     : "nginx signing key "
 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.17.6-1.el8.ngx.x86_64                                      1/1 
  Installing       : nginx-1:1.17.6-1.el8.ngx.x86_64                                      1/1 
  scriptletの実行中: nginx-1:1.17.6-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.17.6-1.el8.ngx.x86_64                                      1/1 

インストール済み:
  nginx-1:1.17.6-1.el8.ngx.x86_64                                                             

完了しました!
$ 

Nginx のサービス起動

Nginx のサービスを起動 (start) します。また、システムの再起動後に自動起動 (enable) するようにもしておきます。

$ sudo systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: http://nginx.org/en/docs/
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
$ sudo systemctl status nginx
 nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-11-26 20:30:09 JST; 42s ago
     Docs: http://nginx.org/en/docs/
 Main PID: 9240 (nginx)
    Tasks: 2 (limit: 26213)
   Memory: 5.6M
   CGroup: /system.slice/nginx.service
           ├─9240 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─9241 nginx: worker process

11月 26 20:30:09 centos-pc systemd[1]: Starting nginx - high performance web server...
11月 26 20:30:09 centos-pc systemd[1]: Started nginx - high performance web server.
$ 

ファイアーウォールの設定

まず、現在のファイアーウォールの設定を確認します。

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 3389/tcp 8787/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
 
$ 

とりあえず http と https のサービスを追加して、設定をロードし直します。

$ sudo firewall-cmd --zone=public --permanent --add-service=http
[sudo] bitwalk のパスワード:
success
$ sudo firewall-cmd --zone=public --permanent --add-service=https
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 3389/tcp 8787/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
 
$ 

LAN 内の他の PC から、Nginx がインストールされたサーバ (192.168.0.25) へ http でアクセスしてみると、Nginx の Welcome ページが表示されました。

とりあえず Nginx のサービスが動作することを確認できました。ここまでの設定では SELinux からアクセス制御エラーは出ませんでした。SELinux をできるだけ無効にせずにシステムを利用したいと考えていますので、エラーが出れば、その対応についてもまとめていきたいです。

今後、Django などの Web アプリケーションをデプロイする際の設定や問題をまとめてブログ記事にする予定です。

参考サイト

  1. nginx: Linux packages
  2. nginx-repo Wiki - OSDN
  3. Introducing NGINX 1.16 and 1.17 - NGINX

ブログランキング・にほんブログ村へにほんブログ村

0 件のコメント: