2018年9月13日木曜日

FreeBSD で nginx に挑戦してみた(その1:nginx のインストール)

 FreeBSD で web サーバーを上げている。 これまでサーバーアプリケーションとして,ずっと apache を使ってきたが,一度 nginx に挑戦したいと思っていた。 今回は,そのお話。

まずは,nginx について。

 nginx(エンジンエックス,と読むらしい)は,ロシアの人が開発したアプリケーションで,ウェブサーバー用のアプリケーションである。 他には apache が有名である。 違いは,apache がプロセス駆動なのに対して,nginx はイベンド駆動であり,多くのアクセスがある場合には nginx の方が圧倒的に有利らしい。 (詳しいことはわかってないので,ネットで調べてみてください)。

 うちのサーバーはそんなにアクセスがあるわけじゃないので,別に apache のままでもいいのだが,せっかくだから nginx を入れてみた,という次第。

nginx のドキュメントなど

 ・http://nginx.org/:公式サイト
 ・http://nginx.org/en/docs/:公式サイトの Document ページ
 ・NGINX wiki:サードパーティー製モジュールの説明はこちら
 ・Full Example Configuration:設定ファイルの(完全な?)例
 ・NGINX wiki (日本語):上記 wiki の日本語訳
 ・NGINX wiki (開始ページ):上記 wiki 日本語訳の「開始ページ」(何故かトップページのリンクからは飛べない…)

 ・nginxの最近のブログ記事:インフラエンジニアway:私にはわかりやすかった。

FreeBSD での nginx

 FreeBSD なので,ports からインストールしてみた。 FreeBSD の ports には nginx 関連は,
 ・/usr/ports/www/nginx
 ・/usr/ports/www/nginx-full
 ・/usr/ports/www/nginx-devel
 ・/usr/ports/www/nginx-lite
 ・/usr/ports/www/nginx-naxsi
がある。

まずはどれをインストールすればよいか,を調べないといけなかった。 ネットで検索すると,Linux を使ってる人たちが多く記載しているが,そこでは,
 ・nginx-light("basic version"),
 ・nginx-naxsi("version with naxsi"),
 ・nginx-core("core version"),
 ・nginx-full("standard version"),
 ・nginx-extras("extended version")
があると書いてあることが多い。 それらの違いは,組み込むモジュールの違いらしい。

nginx のモジュール

 nginx は,いろんな機能が追加されているが,それらはモジュールとして組み込まないといけない。 モジュールには,静的モジュールと動的モジュールがあり,静的モジュールはインストール時に組み込まなくてはいけないが,動的モジュールは起動時に設定で読み込ませればよい。 新しいモジュールは動的なものが多いように思うが,これまたちゃんとは理解しきれていない。

インストールはシンプルな nginx

 このモジュールをセットにしたのが,上記のいくつかある「version」である。 今回は,CGI を使いたいとか,Digest 認証を使いたい,Let's Encrypt で https を使いたい,などから,一番たくさんモジュールを組み込んでいる「nginx-extras」がいいなぁ,と思った。 しかし,FreeBSD の ports を見ると,この「extra」がない…。 仕方ないので,Makefile の OPTION を見てみた。 すると,nginx (/usr/ports/www/nginx/) の方が nginx-full よりも OPTION が多いことがわかった。 そこで,今回は一番シンプルな「nginx (/usr/ports/www/nginx/)」をインストールしてみた。

 一番シンプルな「nginx (/usr/ports/www/nginx/)」だが,これはインストール時に「make config」で組み込むモジュールを指定する。 この config のオプションがとても多い。 よくわからないものがほとんどだったが,とりあえず,UPLOAD_PROGRESS とか ZIP とか,適当に入れておいた。 そういえば FCGI は選択肢になかったから,当然のように組み込まれるのかもしれない…。 他にも AUTH_DIGEST と SSL 関係のものは全部入れてインストールしておいた。 また CT (cert transparency) やら http2,ENCRYPTSESSION なども必要そうに思えたので入れておいた。 あとは STREAM 関係とか,UPSTREAM 関係とか…。使うかどうかわからないけど,MAIL_SSL なんても入れてみた。 ま,どうしてもなら「make config」してインストールし直せばいいし…。

 今回1個だけうまく働かないものがあった。それは「HTTP_VIDEO_THUMBEXTRACTOR」ってやつ。これまた,いまいちよくわかってないのに「video」ってついてるから組み込んでみた。 しかし,これがあると nginx がうまく起動できなかった。理由は不明である。なので,これをなしにしてインストールし直している。

 指定したモジュールは,静的モジュールは nginx に組み込まれ,動的モジュールは「/usr/local/libexec/nginx/」に置かれ(FreeBSD の場合),使いたい時には設定ファイルで読み込ませればよい。

以下にインストール後のメッセージを載せておこう。 ports の cleaning の結果を見ると,依存関係でいくつかのアプリが同時にインストールされているのがわかる。
===================================================================
Recent version of the NGINX introduces dynamic modules support.  In
FreeBSD ports tree this feature was enabled by default with the DSO
knob.  Several vendor's and third-party modules have been converted
to dynamic modules.  Unset the DSO knob builds an NGINX without
dynamic modules support.

To load a module at runtime, include the new `load_module'
directive in the main context, specifying the path to the shared
object file for the module, enclosed in quotation marks.  When you
reload the configuration or restart NGINX, the module is loaded in.
It is possible to specify a path relative to the source directory,
or a full path, please see
https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/ and
http://nginx.org/en/docs/ngx_core_module.html#load_module for
details.

Default path for the NGINX dynamic modules is

/usr/local/libexec/nginx.
===================================================================
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/nginx

      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/nginx

      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.

      For more information, and contact details about the security
      status of this software, see the following webpage:
http://nginx.org/

===>  Cleaning for google-perftools-2.7
===>  Cleaning for luajit-2.0.5_2
===>  Cleaning for yajl-2.1.0
===>  Cleaning for mod_security3-3.0.2_1
===>  Cleaning for gcc7-7.3.0_5
===>  Cleaning for mpc-1.1.0_1
===>  Cleaning for nginx-1.14.0_11,2

少し長くなったので,設定は次回にしよう。

FreeBSD で nginx に挑戦してみた(その2)に続く


(おまけ)
 以下に,FreeBSD の /usr/ports/www/nginx/Makefile から切り出した OPTION 項目のリストを載せておこう。 これらは「make config」の際に表示される順になっている。
DEBUG
DEBUGLOG
DSO
FILE_AIO
IPV6
THREADS
WWW
----------- Modules that require MAIL module
MAIL
MAIL_IMAP
MAIL_POP3
MAIL_SMTP
MAIL_SSL
----------- Modules that require HTTP module
GOOGLE_PERFTOOLS
HTTP
HTTP_ADDITION
HTTP_AUTH_REQ
HTTP_CACHE
HTTP_DAV
HTTP_FLV
HTTP_GEOIP
HTTP_GUNZIP_FILTER
HTTP_GZIP_STATIC
HTTP_IMAGE_FILTER
HTTP_MP4
HTTP_PERL
HTTP_RANDOM_INDEX
HTTP_REALIP
HTTP_REWRITE
HTTP_SECURE_LINK
HTTP_SLICE
HTTP_SSL
HTTP_STATUS
HTTP_SUB
HTTP_XSLT
HTTPV2
STREAM
STREAM_SSL
STREAM_SSL_PREREAD
AJP
AWS_AUTH
BROTLI
CACHE_PURGE
CLOJURE
CT
DEVEL_KIT
ARRAYVAR
DRIZZLE
DYNAMIC_UPSTREAM
ECHO
ENCRYPTSESSION
FASTDFS
FORMINPUT
GRIDFS
HEADERS_MORE
HTTP_ACCEPT_LANGUAGE
HTTP_AUTH_DIGEST
HTTP_AUTH_KRB5
HTTP_AUTH_LDAP
HTTP_AUTH_PAM
HTTP_DAV_EXT
HTTP_EVAL
HTTP_FANCYINDEX
HTTP_FOOTER
HTTP_GEOIP2
HTTP_JSON_STATUS
HTTP_MOGILEFS
HTTP_MP4_H264
HTTP_NOTICE
HTTP_PUSH
HTTP_PUSH_STREAM
HTTP_REDIS
HTTP_RESPONSE
HTTP_SUBS_FILTER
HTTP_TARANTOOL
HTTP_UPLOAD
HTTP_UPLOAD_PROGRESS
HTTP_UPSTREAM_CHECK
HTTP_UPSTREAM_FAIR
HTTP_UPSTREAM_STICKY
HTTP_VIDEO_THUMBEXTRACTOR
HTTP_ZIP
ICONV
LET
LUA
MEMC
MODSECURITY
MODSECURITY3
NAXSI
NJS
PASSENGER
POSTGRES
RDS_CSV
RDS_JSON
REDIS2
RTMP
SET_MISC
SFLOW
SHIBBOLETH
SLOWFS_CACHE
SMALL_LIGHT
SRCACHE
VTS
XSS
----------- GSSAPI implementation (imply HTTP_AUTH_KRBS)
GSSAPI_BASE
GSSAPI_HEIMDAL
GSSAPI_MIT

0 件のコメント: