Nginx /ˌɛndʒɪnˈɛks/ は、フリーでオープンソースな Web サーバです。処理性能・高い並行性・少ないメモリ使用量に焦点を当てて開発されており、HTTP, HTTPS, SMTP, POP3, IMAP のリバースプロキシの機能や、ロードバランサ、HTTP キャッシュなどの機能も持っています。
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-manager は dnf-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 アプリケーションをデプロイする際の設定や問題をまとめてブログ記事にする予定です。
0 件のコメント:
コメントを投稿