序章

Nginx は、世界で最も人気のあるWebサーバーの1つであり、ロードバランサーおよびリバースプロキシとして頻繁に使用されることで知られています。 Apacheよりもリソースに優しく、インターネット上で最大かつ最もトラフィックの多いサイトの多くは、コンテンツの提供をNginxに依存しています。

このガイドでは、FreeBSD11.2サーバーにNginxをインストールする方法を示します。

前提条件

このガイドを始める前に、FreeBSDを実行しているサーバーにアクセスする必要があります。 このガイドは、FreeBSD 11.2を実行しているサーバーを念頭に置いて作成されていますが、サポートされている古いバージョンのオペレーティングシステムでも動作するはずです。

FreeBSDを初めて使用する場合は、これらの手順に従って、このサーバーをカスタマイズすると役立つ場合があります。

さらに、このサーバーのドメイン名を設定する場合は、次のものが必要になります。

  • あなたが所有および管理する登録済みドメイン名。 まだドメイン名を登録していない場合は、そこにある多くのドメイン名レジストラの1つに登録できます(例: Namecheap、GoDaddyなど)。
  • ドメインがサーバーのパブリックIPアドレスを指すDNSARecord。 それらを追加する方法の詳細については、このホスト名チュートリアルに従うことができます。

ステップ1—Nginxをインストールする

まず、FreeBSDの組み込みバイナリパッケージ管理ツールであるpkgを使用してNginxをインストールします。 次のコマンドは、使用可能なパッケージのローカルコピーを更新してから、nginxパッケージをインストールします。

  1. sudo pkg install nginx

pkgを初めて実行する場合は、ブートストラップを許可するかどうかを確認するメッセージが表示されます。 これを行うには、yを押してから、ENTERを押します。 次に、プロンプトが表示されたら、yを押してから、もう一度ENTERを押して、nginxパッケージのインストールを承認することを確認します。

cshまたはtcshシェルを使用している場合は、必ずrehashコマンドを実行してください。 これにより、シェルはインストールした新しいアプリケーションを認識します。

  1. rehash

注:現在使用しているシェルがわからない場合は、次のコマンドで確認できます。

  1. echo $SHELL

出力には、現在使用中のシェルプログラムのファイルパスが表示されます。

Output
/bin/tcsh

これでNginxがサーバーにインストールされましたが、まだ実行されていません。 次のステップでは、サーバーが起動するたびにNginxが実行を開始し、このセッションでサーバーを起動できるようにします。また、IPFWを使用してファイアウォールを設定することにより、サーバーを保護するプロセスを順を追って説明します。

ステップ2— Nginxサービスを有効にし、IPFWを使用してファイアウォールを設定する

FreeBSDがNginxを従来のサービスとして開始するには、FreeBSDにそれを有効にすることを伝える必要があります。 これにより、スタンドアロンアプリケーションとしてではなく、他のサービスと同じように管理できるようになります。また、起動時に自動的に起動するようにFreeBSDを設定できます。

これを行うには、最初にnginxサービスに設定する正しいrcパラメーターを知る必要があります。 rcは、システムの自動ブートプロセスを制御するFreeBSDユーティリティです。 システムで利用可能なすべてのサービスのスクリプトは、/usr/local/etc/rc.dディレクトリにあります。 これらは、rcvar変数を使用して各サービスを有効にするために使用されるパラメーターを定義します。 次のように入力すると、各サービスのrcvarが何に設定されているかを確認できます。

  1. grep rcvar /usr/local/etc/rc.d/*

インストール後、このコマンドは次のようなリストを出力します。

Output
/usr/local/etc/rc.d/cloudconfig:rcvar="cloudinit_enable" /usr/local/etc/rc.d/cloudfinal:rcvar="cloudinit_enable" /usr/local/etc/rc.d/cloudinit:rcvar="cloudinit_enable" /usr/local/etc/rc.d/cloudinitlocal:rcvar="cloudinit_enable" /usr/local/etc/rc.d/nginx:rcvar=nginx_enable /usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

nginxサービスに設定する必要のあるパラメーターは、この出力で強調表示されています。 スクリプト自体の名前(コロンの前のパスの最後のコンポーネント)も、FreeBSDがサービスを参照するために使用する名前であるため、知っておくと役立ちます。

nginxサービスを有効にするには、そのrcvarrc.confファイルに追加する必要があります。このファイルには、起動スクリプトによって参照されるグローバルシステム構成情報が含まれています。 好みのエディタを使用して、sudo権限で/etc/rc.confファイルを開きます。 ここでは、eeを使用します。

  1. sudo ee /etc/rc.conf

ファイルの先頭には、すでにいくつかのrcvarパラメーターがあります。 これらの下にnginx_enablercvarパラメーターを追加し、"YES"に設定します。

/etc/rc.conf
. . .
sshd_enable="YES"
nginx_enable="YES"

. . .

rc.confファイルに残っている間に、IPFWファイアウォールを有効にして構成するためのディレクティブをさらにいくつか追加します。 IPFW は、FreeBSD用に作成されたステートフルファイアウォールです。 これは、ほとんどのユースケースのセキュリティルールをカスタマイズできる強力な構文を提供します。

追加したnginx_enableパラメータのすぐ下に、次の強調表示された行を追加します。

/etc/rc.conf
. . .
nginx_enable="YES"
firewall_enable="YES"
firewall_type="workstation"
firewall_myservices="22/tcp 80/tcp"
firewall_allowservices="any"

これらの各ディレクティブとその設定の機能は次のとおりです。

  • firewall_enable="YES" —このディレクティブを"YES"に設定すると、サーバーが起動するたびにファイアウォールを起動できます。
  • firewall_type="workstation" — FreeBSDはいくつかのデフォルトのタイプのファイアウォールを提供しており、それぞれの構成はわずかに異なります。 workstationタイプを宣言することにより、ファイアウォールはステートフルルールを使用してのみこのサーバーを保護します。
  • firewall_myservices="22/tcp 80/tcp"firewall_myservicesディレクティブは、ファイアウォールの通過を許可するTCPポートを一覧表示できる場所です。 この例では、ポート2280を指定して、サーバーへのSSHアクセスとHTTPアクセスをそれぞれ許可しています。
  • firewall_allowservices="any" —これにより、任意のIPアドレスのマシンが、firewall_myservicesディレクティブで指定されたポートを介して通信できるようになります。

これらの行を追加したら、ファイルを保存し、CTRL + Cを押し、exitと入力して、ENTERを押してエディターを閉じます。

次に、ipfwファイアウォールサービスを開始します。 このサーバーでファイアウォールを起動するのはこれが初めてであるため、起動するとサーバーが停止し、SSH経由でアクセスできなくなる可能性があります。 次のnohupコマンド(「ハングアップなし」を表す)は、ストールを防ぎながらファイアウォールを起動し、標準出力とエラーを一時ログファイルにリダイレクトします。

  1. sudo nohup service ipfw start >/tmp/ipfw.log 2>&1

ただし、cshまたはtcshシェルのいずれかを使用している場合、このリダイレクトによりAmbiguous output redirect.が出力に表示されます。 これらのシェルのいずれかを使用している場合は、代わりに次を実行してipfwを起動します。

  1. sudo nohup service ipfw start >&/tmp/ipfw.log

:将来的には、他のサービスと同じようにipfwファイアウォールを管理できるようになります。 たとえば、サービスを停止、開始、および再起動するには、次のコマンドを実行します。

  1. sudo service ipfw stop
  2. sudo service ipfw start
  3. sudo service ipfw restart

次に、nginxサービスを開始します

  1. sudo service nginx start

次に、Nginxがコンテンツを正しく提供できることをテストするには、サーバーのパブリックIPアドレスをお好みのWebブラウザーのURLバーに入力します。

http://your_server_ip

注:サーバーのパブリックIPアドレスがわからない場合は、次のコマンドを実行して、インターネット上の別の場所から見たサーバーのIPアドレスを出力できます。

  1. curl -4 icanhazip.com

すべてが正常に機能している場合は、デフォルトのNginxランディングページが表示されます。

Nginx default page

これは、Nginxが正しくインストールおよび実行されており、期待どおりにファイアウォールを通過できることを示しています。 ただし、デフォルト以外の設定で機能したり、ドメイン名を使用してコンテンツを提供したりするには、構成を変更する必要があります。

ステップ3—サーバーブロックを設定する

Nginx Webサーバーを使用する場合、サーバーブロック(Apacheの仮想ホストと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。 example.com というドメインを設定しますが、これを独自のドメイン名に置き換える必要があります。 DigitalOceanを使用したドメイン名の設定の詳細については、DigitalOceanDNSの概要を参照してください。

FreeBSD 11.2のNginxでは、/usr/local/www/nginxのディレクトリからドキュメントを提供するように設定された1つのサーバーブロックがデフォルトで有効になっています。 これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合は扱いにくくなる可能性があります。 /usr/local/www/nginxを変更する代わりに、example.comサイトの/usr/local/www内にディレクトリ構造を作成しましょう。

example.com のディレクトリを次のように作成し、-pフラグを使用して必要な親ディレクトリを作成します。

  1. sudo mkdir -p /usr/local/www/example.com/html

次に、ディレクトリの所有権を www ユーザー(デフォルトのNginxランタイムユーザープロファイル)に割り当てます。

  1. sudo chown -R www:www /usr/local/www/example.com

umaskの値を変更していない場合は、Webルートのアクセス許可が正しいはずですが、次のように入力して確認できます。

  1. sudo chmod -R 755 /usr/local/www/example.com

次に、eeを使用して、サンプルのindex.htmlページを作成します。

  1. sudo ee /usr/local/www/example.com/html/index.html

内部に、次のサンプルHTMLを追加します。

/usr/local/www/example.com/html/index.html
<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success!  The example.com server block is working!</h1>
    </body>
</html>

終了したら、ファイルを保存して閉じます。

Nginxがこのコンテンツを提供するには、正しいディレクティブを使用してサーバーブロックを作成する必要があります。 メインのNginx構成ファイルを開きます。 デフォルトでは、これは/usr/local/etc/nginx/ディレクトリに保持されます。

  1. sudo ee /usr/local/etc/nginx/nginx.conf

:通常、デフォルトのnginx.confファイルの編集は避けたいと思います。 ただし、この同じディレクトリ内に、nginx.conf-distというファイルがあります。これは、デフォルトのnginx.confファイルと同じです。 これらの構成変更で元に戻す必要がある場合は、次のコマンドを使用してこのファイルをコピーするだけです。

  1. sudo cp /usr/local/etc/nginx/nginx.conf-dist /usr/local/etc/nginx/nginx.conf

ファイルを最初に開くと、最上部に次のように表示されます。

/usr/local/etc/nginx/nginx.conf
#user  nobody;
worker_processes  1;

. . .

ポンド記号(#)を削除してuserディレクティブのコメントを解除してから、ユーザーをnobodyからwwwに変更します。 次に、worker_processesディレクティブを更新します。これにより、Nginxが使用するワーカープロセスの数を選択できます。 ここに入力する最適な値は、必ずしも明白であるとは限らず、簡単に見つけることができるとは限りません。 autoに設定すると、NginxはCPUコアごとに1つのワーカーに設定します。これは、ほとんどの場合で十分です。

/usr/local/etc/nginx/nginx.conf
user  www;
worker_processes  auto;
. . .

次に、serverブロックまで下にスクロールします。 すべてのコメントを削除すると、次のようになります。

/usr/local/etc/nginx/nginx.conf
. . .
    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/local/www/nginx;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }

コメントアウトされたすべての行を含むこのサーバーブロック全体を削除し、次のコンテンツに置き換えます。

/usr/local/etc/nginx/nginx.conf
. . .
    server {
        access_log /var/log/nginx/example.com.access.log;
        error_log /var/log/nginx/example.com.error.log;
        listen       80;
        server_name  example.com www.example.com;

        location / {
            root   /usr/local/www/example.com/html;
            index  index.html index.htm;
        }
    }
. . .

このサーバーブロックのディレクティブの機能は次のとおりです。

  • access_log:このディレクティブは、サーバーのアクセスログの場所を定義します。
  • error_log:これは、Nginxがエラーログを書き込むファイルを定義します。
  • listenlistenディレクティブは、Nginxがリッスンするポートを宣言します。 この場合、HTTPトラフィックをリッスンできるようにポート80に設定します。
  • server_name:ここで、Nginxにドメイン名とそのエイリアスを指定します。 ドメイン名がない場合は、NginxがサーバーのパブリックIPアドレスを指すようにします。
  • root:これは、このステップの前半で作成したWebサイトドキュメントルートを定義します。
  • index:このディレクティブは、インデックスとして使用されるファイルと、それらをチェックする順序を定義します。

コメントを削除すると、ファイルは次のようになります。

/usr/local/letc/nginx/nginx.conf
user  www;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        access_log /var/log/nginx/example.com.access.log;
        error_log /var/log/nginx/example.com.error.log;
        listen       80;
        server_name  example.com www.example.com;

        location / {
            root   /usr/local/www/example.com;
            index  index.html index.htm;
        }

    }

}

終了したら、ファイルを保存して閉じます。 次に、次のように入力して、構成ファイルの構文エラーをテストします。

  1. sudo nginx -t

構成ファイルに検出可能な構文エラーがない場合は、次の出力が表示されます。

Output
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

上記のコマンドがエラーで返される場合は、エラーが見つかった場所でNginx構成ファイルを再度開き、問題の修正を試みてください。

構成が正しくチェックアウトされたら、先に進み、nginxサービスをリロードして、変更を有効にします。

  1. sudo service nginx reload

これで、Nginxはindex.htmlファイルで設定したコンテンツを提供するはずです。 http://example.comに移動してこれをテストします。ここで、次のように表示されます。

Nginx first server block

最後のステップとして、Nginxサービスを管理できるようにするいくつかのコマンドについて説明します。

ステップ4—Nginxプロセスの管理

Webサーバーが稼働しているので、いくつかの基本的な管理コマンドを確認しましょう。

Webサーバーを停止するには、次のように入力します。

  1. sudo service nginx stop

停止時にWebサーバーを起動するには、次のように入力します。

  1. sudo service nginx start

サービスを停止してから再開するには、次のように入力します。

  1. sudo service nginx restart

単に構成を変更するだけの場合は、接続を切断せずにNginxをリロードできます。 これを行うには、次のように入力します。

  1. sudo service nginx reload

最後に、ステップ2でnginx_enable="YES"ディレクティブをrc.confファイルに追加してnginxサービスを有効にした方法を思い出してください。 nginxサービスを無効にして、サーバーの起動時にサービスが起動しないようにする場合は、そのファイルを再度開いて、その行を削除する必要があります。

結論

これで、完全に機能するNginxWebサーバーがマシンにインストールされました。 ここから、HTTPSを有効にすることで、サーバーのWebトラフィックを暗号化できます。 これを行う方法については、FreeBSDでLet’sEncryptを使用してNginxを保護する方法を参照してください。 MySQLとPHPインストールして構成することもできます。これにより、Nginxとともに完全なFEMPスタックが提供されます。