背景
うちの会社のHTTP系のサービスはほとんどApacheとNginxで構築しているのですが、Nginxのバージョンがかなり古くなってきているのでリニューアルしようと画策中です。
で、去年の12月にNginxの最新バージョンである1.15.8がリリースされていたので、それをインストールしてみました。
また、Nginxのタイムアウト検証のためにレスポンスをわざと遅延させることができるようにしたかったため、sleep処理ができるようになる「HTTP Echo Module」を入れてみました。
こちらのモジュールの機能についてはいろいろ検証してみてから別記事でまとめようとは思います。
Nginxについて
Nginx?HTTP Echoなんたら?って何ぞや?
って人のためにくっそ簡単に整理しました。
Nginxとは?
アメリカのNginx社が開発したオープンソースのWEBサーバアプリケーションです。
Apacheよりも動作が軽いと言われており、またリバースプロキシやロードバランシング機能を持っているため、簡易LBとして導入されたりしております。
設定方法も割と簡単で、コンフィグの書き方も最近のものに似通っているため、Apacheのシェアをどんどん食って広まっているWEBサーバです。
また、コンテンツキャッシュも可能なため、主にWEBコンテンツのキャッシュサーバとしても運用されたりします。
設定が簡単で多機能なのでいろいろな場面で使うとこができますね。
個人的にはApacheよりもコンフィグも書きやすいし、習得にかかる時間も少ないような気がします。
HTTP Echo Moduleとは?
HTTP Echo Moduleとは、Nginxにデフォルトとは別に様々な機能を追加するためのモジュールです。
インストールする際に組み込んでおくと、HTTPリクエストに対してのレスポンスにEchoを使うことができたり、わざとレスポンスにかかる時間を多くしたりと様々な機能が追加できます。
今回はTimeoutあたりの検証がしたかったため、わざとレスポンスを遅れさせる機能が欲しかったので導入しました。
インストール方法
今回はCentOS6に導入していきます。
例のごとく7ではないですが、そのうち7でも検証する予定です。
環境確認
インストールするサーバの環境を確認。
# uname -a
Linux [サーバ名] 2.6.32-696.el6.x86_64 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release
CentOS release 6.10 (Final)
CentOS6ですね。
必要なものをダウンロードする
Nginxはこちらでダウンロードできます。
現在の最新版は1.15.8なので、それをダウンロードしましょう。
ちなみに、こういうソースファイルは/usr/local/srcとかに置いておくと散らからないのでおすすめです。
# cd /usr/local/src
# wget http://nginx.org/download/nginx-1.15.8.tar.gz
あとはHTTP Echo Moduleも導入するため、当該モジュールもダウンロードしておきましょう。
# wget https://github.com/openresty/echo-nginx-module/archive/master.zip
これで必要なものの準備はOKです。
ダウンロードしたものを解凍する
ソースインストールするためにダウンロードしたものを解凍します。
# tar zxvf nginx-1.15.8.tar.gz
# unzip master.zip
解凍に成功すれば、同じディレクトリに解凍されたものが存在するはずです。
# ls -l
drwxr-xr-x. 5 root root 4096 1月 30 14:42 2019 echo-nginx-module-master
-rw-r--r--. 1 root root 77069 2月 13 17:07 2019 master.zip
drwxr-xr-x. 9 1001 1001 4096 2月 13 17:10 2019 nginx-1.15.8
-rw-r--r--. 1 root root 1027862 2月 13 17:07 2019 nginx-1.15.8.tar.gz
Nginxとモジュールのインストール
では、実際にNginxをインストールしていきましょう。
本当はrpmパッケージ化してyumでインストールして管理もyumに任せたかったのですが、時間もなかったし難しそうだったのでソースインストールです。
時間があればrpm化についてもやってみようかと思います。
まずは解凍したNginxのディレクトリに移動
# cd nginx-1.15.8
そして、confiugreをたたいていきましょう。
その際に、add-moduleに先程ダウンロード、解凍したHTTP Echo Moduleを指定することでモジュールを追加できます。
# ./configure --prefix=/usr/local/nginx-1.15.8 --with-http_ssl_module --add-module=../echo-nginx-module-master
エラーが出なかったらビルドしてインストール
# make
# make install
うまくいけば、/usr/localの下にnginx-1.15.8というディレクトリが作成されており、コンフィグファイル等が入っているはずです。
# ls -l /usr/local/nginx-1.15.8
drwx------. 2 nobody root 4096 2月 13 17:36 2019 client_body_temp
drwxr-xr-x. 2 root root 4096 2月 13 17:38 2019 conf
drwx------. 2 nobody root 4096 2月 13 17:36 2019 fastcgi_temp
drwxr-xr-x. 2 root root 4096 2月 13 17:15 2019 html
drwxr-xr-x. 2 root root 4096 2月 13 17:38 2019 logs
drwx------. 2 nobody root 4096 2月 13 17:36 2019 proxy_temp
drwxr-xr-x. 2 root root 4096 2月 13 17:15 2019 sbin
drwx------. 2 nobody root 4096 2月 13 17:36 2019 scgi_temp
drwx------. 2 nobody root 4096 2月 13 17:36 2019 uwsgi_temp
ちなみにビルドやconfigureでエラーが出る場合は必要なアプリケーションが不足している可能性があります。
以下をインストールすればよいかも。
# yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
それでもだめだったら・・・頑張ってください。
起動スクリプトの用意
Nginxとモジュールのインストールはこれで完了ですが、このままだとNginxの起動スクリプトがないため、起動にひと苦労します。
ので、Linux準拠の起動スクリプトを作成しましょう。
と言っても、こちらからダウンロードすればそのまま使えるはずです。
上のURLからコピペして、/etc/init.d/の直下に置きましょう。
権限を追加すればなおよし。
# chmod 755 /etc/init.d/nginx
で、これでnginx start!としたいところですが、今の状態だと起動スクリプトに設定しているパスにnginxがないため、起動しません。
なので、そこにファイルを移動してあげるか、シンボリックリンクを貼ってあげましょう。
私はシンボリックリンク作成で対応しました。
# ln -s /usr/local/nginx-1.15.8/sbin/nginx /usr/sbin/nginx
# ln -s /usr/local/nginx-1.15.8/conf /etc/nginx
これで起動スクリプトに書いてある場所にそれぞれ配置することができましたので、起動してみましょう。
# /etc/init.d/nginx start
nginx を起動中: [ OK ]
無事起動すれば、Nginxのインストールは完了です!
実際にHTTP Echo Moduleを使ってみる
では、実際にHTTP Echo Moduleを使用してレスポンスを遅らせてみましょう。
コンフィグのserverディレクティブに以下を追加してみます。
# vi /etc/nginx/nginx.conf
(前略)
server {
listen 80;
server_name localhost;
# 以下追加
location /echo_test {
echo_sleep 3;
echo Test OK!;
}
# 追加ここまで
#charset koi8-r;
(後略)
んで、実際にリクエストしてみましょう。
curl http://localhost/echo_test
3秒ほど経った後に以下のメッセージが返ってくればOKです。
Test OK!
あとがき
というわけで、Nginxの最新版インストール方法とHTTP Echo Moduleの導入方法でした。
他のモジュールを入れたい場合も大体の手順は一緒なので、参考にはなるかと思います。
それでは!
nginx実践ガイド (impress top gear)
Nginx ポケットリファレンス
コメント