FreeBSD 11.2にNginxをインストールする方法

前書き

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

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

前提条件

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

FreeBSDを初めて使用する場合は、https://www.digitalocean.com/community/tutorials/how-to-get-started-with-freebsd [これらの手順]に従ってこのサーバーをカスタマイズすると役立つ場合があります。 。

さらに、このサーバーのドメイン名をセットアップする予定の場合は、次のものが必要です。

  • 所有および管理する登録済みドメイン名。 登録済みのドメイン名をまだお持ちでない場合は、多数のドメイン名レジストラーのいずれかに登録できます(例: Namecheap、GoDaddyなど)。

  • ドメインがサーバーのパブリックIPアドレスを指すDNS レコード。 追加方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean [このホスト名チュートリアル]を参照してください。

ステップ1-Nginxのインストール

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

sudo pkg install nginx

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

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

rehash

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

ステップ2-Nginxサービスの有効化とIPFWを使用したファイアウォールのセットアップ

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

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

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=
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

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

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

sudo ee /etc/rc.conf

ファイルの先頭には、いくつかの `+ rcvar `パラメータがすでに配置されています。 これらの下に ` nginx_enable `パラメーターと ` rcvar `パラメーターを追加し、 `" YES "+`に設定します。

/etc/rc.conf

. . .
sshd_enable="YES"


. . .

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

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

/etc/rc.conf

. . .
nginx_enable="YES"

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

  • + firewall_enable =" YES "+-このディレクティブを `" YES "`に設定すると、サーバーが起動するたびにファイアウォールが起動します。

  • + firewall_type =" workstation "+-FreeBSDはいくつかのデフォルトタイプのファイアウォールを提供しますが、それぞれがわずかに異なる設定を持っています。 `+ workstation +`タイプを宣言することにより、ファイアウォールはステートフルルールを使用してこのサーバーのみを保護します。

  • + firewall_myservices =" 22 / tcp 80 / tcp "+-`+ firewall_myservices `ディレクティブは、ファイアウォールの通過を許可するTCPポートを一覧表示できる場所です。 この例では、ポート ` 22 `および ` 80 +`を指定して、それぞれサーバーへのSSHおよびHTTPアクセスを許可しています。

  • + firewall_allowservices =" any "+-これにより、任意のIPアドレスのマシンが、 `+ firewall_myservices +`ディレクティブで指定されたポートを介して通信できるようになります。

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

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

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

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

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

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

sudo service nginx start

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

http://

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

image:https://assets.digitalocean.com/freebsd/nginx/nginx_default_page.png [Nginxデフォルトページ]

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

手順3-サーバーブロックの設定

Nginx Webサーバーを使用する場合、server blocks(Apacheの仮想ホストに類似)を使用して構成の詳細をカプセル化し、単一サーバーから複数のドメインをホストできます。 * example.com というドメインを設定しますが、これを*自分のドメイン名に置き換える必要があります。 DigitalOceanを使用したドメイン名の設定の詳細については、https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-dns [DigitalOcean DNSの紹介]をご覧ください。

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

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

sudo mkdir -p /usr/local/www//html

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

sudo chown -R www:www /usr/local/www/

`+ umask +`の値を変更していない場合、Webルートの権限は正しいはずですが、次のように入力して確認できます。

sudo chmod -R 755 /usr/local/www/

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

sudo ee /usr/local/www//html/index.html

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

/usr/local/www/example.com/html/index.html

<html>
   <head>
       <title>Welcome to !</title>
   </head>
   <body>
       <h1>Success!  The  server block is working!</h1>
   </body>
</html>

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

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

sudo ee /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  ;
worker_processes  ;
. . .

次に、「+ 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/.access.log;
       error_log /var/log/nginx/.error.log;
       listen       80;
       server_name   www.;

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

このサーバーブロックのディレクティブは次のように機能します。

  • + access_log +:このディレクティブは、サーバーのアクセスログの場所を定義します。

  • + error_log +:これは、Nginxがエラーログを書き込むファイルを定義します。

  • + listen +: `+ listen `ディレクティブは、Nginxがリッスンするポートを宣言します。 この場合、HTTPトラフィックをリッスンできるように、ポート「+80」に設定します。

  • + server_name +:ここで、Nginxにドメイン名とドメイン名を指定します。 ドメイン名がない場合は、NginxがサーバーのパブリックIPアドレスを指すようにします。

  • + root +:これは、このステップで前に作成したWebサイトのドキュメントルートを定義します。

  • + index +:このディレクティブは、インデックスとして使用されるファイルと、チェックする順番を定義します。

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

/usr/local/letc/nginx/nginx.conf

user  www;
worker_processes  ;

events {
   worker_connections  1024;
}

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

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

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

   }

}

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

sudo nginx -t

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

Outputnginx: 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 +」サービスをリロードして変更を有効にします。

sudo service nginx reload

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

image:https://assets.digitalocean.com/articles/nginx_server_block_1404/first_block.png [Nginx最初のサーバーブロック]

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

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

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

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

sudo service nginx stop

Webサーバーが停止したときに起動するには、次のように入力します。

sudo service nginx start

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

sudo service nginx restart

単に設定を変更するだけであれば、接続を切断せずにNginxをリロードできます。 これを行うには、次を入力します。

sudo service nginx reload

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

結論

これで、完全に機能するNginx Webサーバーがマシンにインストールされました。 ここから、HTTPSを有効にしてサーバーのWebトラフィックを暗号化できます。 これを行う方法については、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-letsencrypt-freebsd [FreeBSDでLet’s Encryptを使用してNginxを保護する方法]を参照してください。 また、https://www.digitalocean.com/community/tutorials/how-to-install-an-nginx-mysql-and-php-femp-stack-on-freebsd-10-1 [MySQLをインストールおよび構成し、 PHP]は、Nginxとともに、完全なFEMPスタックを提供します。