FreeBSD11.2にNginxをインストールする方法
序章
Nginx は、世界で最も人気のあるWebサーバーの1つであり、ロードバランサーおよびリバースプロキシとして頻繁に使用されることで知られています。 Apacheよりもリソースに優しく、インターネット上で最大かつ最もトラフィックの多いサイトの多くは、コンテンツの提供をNginxに依存しています。
このガイドでは、FreeBSD11.2サーバーにNginxをインストールする方法を示します。
前提条件
このガイドを始める前に、FreeBSDを実行しているサーバーにアクセスする必要があります。 このガイドは、FreeBSD 11.2を実行しているサーバーを念頭に置いて作成されていますが、サポートされている古いバージョンのオペレーティングシステムでも動作するはずです。
FreeBSDを初めて使用する場合は、これらの手順に従って、このサーバーをカスタマイズすると役立つ場合があります。
さらに、このサーバーのドメイン名を設定する場合は、次のものが必要になります。
- あなたが所有および管理する登録済みドメイン名。 まだドメイン名を登録していない場合は、そこにある多くのドメイン名レジストラの1つに登録できます(例: Namecheap、GoDaddyなど)。
- ドメインがサーバーのパブリックIPアドレスを指すDNSARecord。 それらを追加する方法の詳細については、このホスト名チュートリアルに従うことができます。
ステップ1—Nginxをインストールする
まず、FreeBSDの組み込みバイナリパッケージ管理ツールであるpkg
を使用してNginxをインストールします。 次のコマンドは、使用可能なパッケージのローカルコピーを更新してから、nginx
パッケージをインストールします。
- sudo pkg install nginx
pkg
を初めて実行する場合は、ブートストラップを許可するかどうかを確認するメッセージが表示されます。 これを行うには、y
を押してから、ENTER
を押します。 次に、プロンプトが表示されたら、y
を押してから、もう一度ENTER
を押して、nginx
パッケージのインストールを承認することを確認します。
csh
またはtcsh
シェルを使用している場合は、必ずrehash
コマンドを実行してください。 これにより、シェルはインストールした新しいアプリケーションを認識します。
- rehash
注:現在使用しているシェルがわからない場合は、次のコマンドで確認できます。
- 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
が何に設定されているかを確認できます。
- 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
サービスを有効にするには、そのrcvar
をrc.conf
ファイルに追加する必要があります。このファイルには、起動スクリプトによって参照されるグローバルシステム構成情報が含まれています。 好みのエディタを使用して、sudo
権限で/etc/rc.conf
ファイルを開きます。 ここでは、ee
を使用します。
- sudo ee /etc/rc.conf
ファイルの先頭には、すでにいくつかのrcvar
パラメーターがあります。 これらの下にnginx_enable
rcvar
パラメーターを追加し、"YES"
に設定します。
. . .
sshd_enable="YES"
nginx_enable="YES"
. . .
rc.conf
ファイルに残っている間に、IPFWファイアウォールを有効にして構成するためのディレクティブをさらにいくつか追加します。 IPFW は、FreeBSD用に作成されたステートフルファイアウォールです。 これは、ほとんどのユースケースのセキュリティルールをカスタマイズできる強力な構文を提供します。
追加したnginx_enable
パラメータのすぐ下に、次の強調表示された行を追加します。
. . .
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ポートを一覧表示できる場所です。 この例では、ポート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
注:将来的には、他のサービスと同じようにipfw
ファイアウォールを管理できるようになります。 たとえば、サービスを停止、開始、および再起動するには、次のコマンドを実行します。
- sudo service ipfw stop
- sudo service ipfw start
- sudo service ipfw restart
次に、nginx
サービスを開始します
- sudo service nginx start
次に、Nginxがコンテンツを正しく提供できることをテストするには、サーバーのパブリックIPアドレスをお好みのWebブラウザーのURLバーに入力します。
http://your_server_ip
注:サーバーのパブリックIPアドレスがわからない場合は、次のコマンドを実行して、インターネット上の別の場所から見たサーバーのIPアドレスを出力できます。
- curl -4 icanhazip.com
すべてが正常に機能している場合は、デフォルトのNginxランディングページが表示されます。
これは、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
フラグを使用して必要な親ディレクトリを作成します。
- sudo mkdir -p /usr/local/www/example.com/html
次に、ディレクトリの所有権を www ユーザー(デフォルトのNginxランタイムユーザープロファイル)に割り当てます。
- sudo chown -R www:www /usr/local/www/example.com
umask
の値を変更していない場合は、Webルートのアクセス許可が正しいはずですが、次のように入力して確認できます。
- sudo chmod -R 755 /usr/local/www/example.com
次に、ee
を使用して、サンプルのindex.html
ページを作成します。
- sudo ee /usr/local/www/example.com/html/index.html
内部に、次のサンプル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/
ディレクトリに保持されます。
- sudo ee /usr/local/etc/nginx/nginx.conf
注:通常、デフォルトのnginx.conf
ファイルの編集は避けたいと思います。 ただし、この同じディレクトリ内に、nginx.conf-dist
というファイルがあります。これは、デフォルトのnginx.conf
ファイルと同じです。 これらの構成変更で元に戻す必要がある場合は、次のコマンドを使用してこのファイルをコピーするだけです。
- sudo cp /usr/local/etc/nginx/nginx.conf-dist /usr/local/etc/nginx/nginx.conf
ファイルを最初に開くと、最上部に次のように表示されます。
#user nobody;
worker_processes 1;
. . .
ポンド記号(#
)を削除してuser
ディレクティブのコメントを解除してから、ユーザーをnobodyからwwwに変更します。 次に、worker_processes
ディレクティブを更新します。これにより、Nginxが使用するワーカープロセスの数を選択できます。 ここに入力する最適な値は、必ずしも明白であるとは限らず、簡単に見つけることができるとは限りません。 auto
に設定すると、NginxはCPUコアごとに1つのワーカーに設定します。これは、ほとんどの場合で十分です。
user www;
worker_processes auto;
. . .
次に、server
ブロックまで下にスクロールします。 すべてのコメントを削除すると、次のようになります。
. . .
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;
}
}
コメントアウトされたすべての行を含むこのサーバーブロック全体を削除し、次のコンテンツに置き換えます。
. . .
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がエラーログを書き込むファイルを定義します。listen
:listen
ディレクティブは、Nginxがリッスンするポートを宣言します。 この場合、HTTPトラフィックをリッスンできるようにポート80
に設定します。server_name
:ここで、Nginxにドメイン名とそのエイリアスを指定します。 ドメイン名がない場合は、NginxがサーバーのパブリックIPアドレスを指すようにします。root
:これは、このステップの前半で作成したWebサイトドキュメントルートを定義します。index
:このディレクティブは、インデックスとして使用されるファイルと、それらをチェックする順序を定義します。
コメントを削除すると、ファイルは次のようになります。
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;
}
}
}
終了したら、ファイルを保存して閉じます。 次に、次のように入力して、構成ファイルの構文エラーをテストします。
- 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://example.com
に移動してこれをテストします。ここで、次のように表示されます。
最後のステップとして、Nginxサービスを管理できるようにするいくつかのコマンドについて説明します。
ステップ4—Nginxプロセスの管理
Webサーバーが稼働しているので、いくつかの基本的な管理コマンドを確認しましょう。
Webサーバーを停止するには、次のように入力します。
- sudo service nginx stop
停止時にWebサーバーを起動するには、次のように入力します。
- sudo service nginx start
サービスを停止してから再開するには、次のように入力します。
- sudo service nginx restart
単に構成を変更するだけの場合は、接続を切断せずにNginxをリロードできます。 これを行うには、次のように入力します。
- sudo service nginx reload
最後に、ステップ2でnginx_enable="YES"
ディレクティブをrc.conf
ファイルに追加してnginx
サービスを有効にした方法を思い出してください。 nginx
サービスを無効にして、サーバーの起動時にサービスが起動しないようにする場合は、そのファイルを再度開いて、その行を削除する必要があります。
結論
これで、完全に機能するNginxWebサーバーがマシンにインストールされました。 ここから、HTTPSを有効にすることで、サーバーのWebトラフィックを暗号化できます。 これを行う方法については、FreeBSDでLet’sEncryptを使用してNginxを保護する方法を参照してください。 MySQLとPHPをインストールして構成することもできます。これにより、Nginxとともに完全なFEMPスタックが提供されます。