前書き

Nginx、MySQL、およびPHPは、Web上の動的コンテンツを提供するための強力なソリューションとして簡単に組み合わせることができます。 これら3つのソフトウェアは、FreeBSDマシンにインストールして構成し、* FEMPスタック*と呼ばれるものを作成できます。

このガイドでは、FreeBSD 10.1サーバーにFEMPスタックをインストールする方法を示します。 より早く起動して実行するために、パッケージを使用してソフトウェアをインストールします。 これらのパッケージは、ほとんどのサーバーで適切に機能する合理的なデフォルトを提供します。

コンポーネントをインストールする

まず、FreeBSDパッケージシステムを使用して必要なソフトウェアをすべてインストールします。 「インストール」コマンドは、利用可能なパッケージのローカルコピーを更新し、要求したパッケージをインストールします。

sudo pkg install nginx mysql56-server php56 php56-mysql

これにより、コンテンツを提供するNginx Webサーバー、情報の保存に使用されるMySQLデータベースサーバー、および動的コンテンツを処理するPHP処理言語がダウンロードおよびインストールされます。

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

rehash

終了したら、先に進んでコンポーネントの有効化と構成を開始できます。

すべてのサービスを有効にする

最後のセクションでは、サーバーで実行する必要がある3つの個別のサービスをダウンロードしました。

FreeBSDがこれらを従来のサービスとして開始するためには、それらを有効にしたいことをFreeBSDに伝える必要があります。 これにより、1回限りのアプリケーションではなくサービスとしてそれらを処理できるようになります。また、ブート時に自動的に起動するようにFreeBSDを構成します。

最初に、各サービスに設定する正しいrcパラメーターを知る必要があります。 `+ / usr / local / etc / rc.d `ディレクトリにあるサービススクリプトは、 ` rcvar `変数を使用して各サーバーを有効にするために使用するパラメーターを定義します。 次のように入力すると、各サービスの ` rcvar +`の設定を確認できます。

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

次のようなリストを取得する必要があります。

/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable
/usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable
/usr/local/etc/rc.d/dbus:rcvar=dbus_enable
/usr/local/etc/rc.d/mysql-server:
/usr/local/etc/rc.d/nginx:rcvar=
/usr/local/etc/rc.d/php-fpm:rcvar=
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

ご覧のとおり、これにより、各サービスに設定する必要があるパラメーターを簡単に出力できます。 スクリプト自体の名前(コロン文字までのパスの最後のコンポーネント)も、FreeBSDがサービスに使用する実際の名前を示しているため、注目に値します。

これらのサービスを有効にするには、sudo権限で `+ / etc / rc.conf +`ファイルを編集します:

sudo vi /etc/rc.conf

内部では、開始したいサービスごとに行を追加します。 各サービスに対して検出した `+ rcvar +`パラメータを使用し、「YES」に設定して各サービスを有効にできます。

mysql_enable="YES"
nginx_enable="YES"
php_fpm_enable="YES"

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

PHPを構成する

次に、Webサーバーから送信されたPHPリクエストの処理を担当するPHP-FPMサービスを構成します。

最初に、オプションプログラムの設定ファイルが保存されている `+ / usr / local / etc +`ディレクトリに移動します。

cd /usr/local/etc

このディレクトリには、修正するPHP構成ファイルが多数あります。 PHP-FPM構成ファイル自体から始めます。 これを `+ sudo +`権限で開きます:

sudo vi php-fpm.conf

内部では、いくつかの異なるオプションを調整します。 まず、通信にネットワークポートの代わりにUnixソケットを使用するようにPHP-FPMを構成します。 これは、単一サーバー内で通信​​するサービスにとってより安全です。

次のような行を見つけます。

listen = 127.0.0.1:9000

これを変更して、 `+ / var / run +`ディレクトリ内のソケットを使用します。

listen =

次に、作成されるソケットの所有者、グループ、およびアクセス許可セットを構成します。 この構成を処理する、コメントアウトされたオプションのグループがあります。

;listen.owner = www
;listen.group = www
;listen.mode = 0660

先頭のコメントマーカーを削除して、これらを有効にします。

listen.owner = www
listen.group = www
listen.mode = 0660

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

次に、PHPの一般的な動作を設定する `+ php.ini`ファイルを作成する必要があります。 PHPが読み込む `+ php.ini`ファイルにコピーすることを選択できる2つのサンプルファイルが含まれています。

`+ php.ini-production`ファイルは必要なものに近くなるので、それを使用します。 PHPが以下をチェックするファイルに製品版をコピーします。

sudo cp php.ini-production php.ini

`+ sudo +`権限で編集するためにファイルを開きます:

sudo vi php.ini

内部では、 `+ cgi.fix_pathinfo +`の動作を設定するセクションを見つける必要があります。 デフォルトでコメントアウトされ、「1」に設定されます。 これのコメントを外し、「0」に設定する必要があります。 これにより、プロセスに渡されたファイルが見つからない場合、PHPはパスの一部を実行しようとしません。 この動作を妨げない場合、悪意のあるユーザーがこれを使用して任意のコードを実行する可能性があります。

`+ cig.fix_pathinfo +`行のコメントを外し、「0」に設定します。

cgi.fix_pathinfo=0

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

PHP-FPMが完全に構成されたので、次のように入力してサービスを開始できます。

sudo service php-fpm start

これで、MySQLインスタンスの構成に進むことができます。

MySQLを構成する

MySQLの構成を開始するには、MySQLサービスを開始する必要があります。

sudo service mysql-server start

このコマンドを初めて実行すると、ファイルシステムに必要なディレクトリ構造が作成され、必要なデータベースファイルがインストールされます。 その後、MySQLサーバープロセスを開始します。

サービスが開始された後、インストールを保護する必要があります。 これは、「+ mysql_secure_installation 」というスクリプトを使用して実現できます。 これを ` sudo +`権限で実行して、いくつかの安全でないデフォルトをロックダウンします:

sudo mysql_secure_installation
. . .

Enter current password for root (enter for none):

スクリプトは、MySQLルートアカウントの現在のパスワードを尋ねることから始まります。 このユーザーのパスワードをまだ設定していないため、「ENTER」を押してこのプロンプトをバイパスできます。

Set root password? [Y/n]

次に、MySQLルートアカウントのパスワードを設定するかどうかを尋ねられます。 「ENTER」を押してこの提案を受け入れます。 管理パスワードを選択して確認します。

その後、スクリプトは、デフォルトのMySQLインストールのいくつかの安全でない条件を元に戻すのに役立つ追加の提案を進めます。 これらのプロンプトのすべてで「ENTER」を押すだけで、推奨されるすべてのアクションが完了します。

MySQLサービスを再起動して、インスタンスがセキュリティの変更をすぐに実装できるようにします。

sudo service mysql-server restart

これで、MySQLインスタンスが希望どおりに稼働しているので、先に進みます。

Nginxを構成する

次のタスクは、Nginxのセットアップです。 開始するには、Webサーバーを開始する必要があります。

sudo service nginx start

これで、 `+ / usr / local / etc `ディレクトリの ` nginx +`ディレクトリに移動して、Nginxの設定を開始できます。

cd /usr/local/etc/nginx

ここでは、メインのNginx設定ファイルを `+ sudo +`権限で開く必要があります:

sudo vi nginx.conf

内部では、Nginxインスタンスが他のコンポーネントと連携できるように変更を開始できます。

開始するには、ファイルの先頭にある `+ user `ディレクティブのコメントを外して修正します。 ` www +`ユーザーとして動作するWebサーバーが必要です。PHP-FPMインスタンスがそれを探しているからです:

user www;

また、システムに搭載されているCPUまたはコアの数に「+ worker_processes 」を設定する必要があります。 (サーバーに搭載されているCPUの数を調べるには、コマンドラインから「 sysctl hw.ncpu +」と入力します):

worker_processes ;

次に、 + error_log +`ディレクティブを使用してエラーの詳細度と場所を設定します。 `+ info`ログレベルで + / var / log / nginx / error.log`の場所にログを記録します。

error_log ;

`+ http `ブロックでは、アクセスログも設定します。 これは ` / var / log / nginx / access.log +`にあります:

access_log /var/log/nginx/access.log;

`+ server `ブロックでは、 ` server_name `ディレクティブを修正して、サーバーのドメイン名またはIPアドレスを使用する必要があります。 メインドメインの後にホスト名を追加することで、サーバーに「 www +」ホスト名に応答させることもできます。

server {
   listen          80;
   server_name      www.;

   . . .

メインの + server +`ブロックで `+ root`と + index`ディレクティブを設定します。 ドキュメントルートは `+ / usr / local / www / nginx `になり、インデックスディレクティブは ` index.html `または ` index.htm `ファイルにフォールバックする前に ` index.php +`ファイルを提供しようとします。

これらのディレクティブは `+ server `コンテキスト内で定義したため、 ` location / `ブロック内では必要ありません。 このブロックでは、代わりに ` try_files +`ディレクティブを設定して、404エラーでフォールバックする前に、ユーザーリクエストをファイルとして、次にディレクトリとして提供しようとします。

server {

   . . .




   location / {

   }

   . . .

最後に、PHPファイルを処理するロケーションブロックを構成する必要があります。 このブロックは、 `+ .php`で終わるリクエストと一致します。 ファイル自体を処理するだけで、ファイルが見つからない場合は404エラーを返します。

先に `+ php-fpm.conf `ファイルで設定したソケットを使用します。 一部は ` fastcgi_params `ファイルからパラメーターを読み込むことで、他のFastCGIプロキシオプションも設定します。 PHPが実行するファイルを認識できるように、 ` SCRIPT_FILENAME +`パラメーターを明示的に設定する必要があります。

server {

   . . .

   location ~ \.php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass unix:/var/run/php-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $request_filename;
       include fastcgi_params;
   }

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

worker_processes  ;


events {
   worker_connections  1024;
}

http {
   include       mime.types;
   default_type  application/octet-stream;



   sendfile        on;
   keepalive_timeout  65;

   server {
       listen       80;
       server_name   www.;



       location / {

       }

       error_page      500 502 503 504  /50x.html;
       location = /50x.html {
           root /usr/local/www/nginx-dist;
       }









   }
}

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

次に、ファイルで参照したログディレクトリとファイルを作成する必要があります。 最初に、 `+ / var / log / nginx`ディレクトリを作成します:

sudo mkdir -p /var/log/nginx

次に、空のログファイルを作成できます。

sudo touch /var/log/nginx/access.log
sudo touch /var/log/nginx/error.log

これで、ドキュメントルートを構成する準備が整いました。 ルートを `+ / usr / local / www / nginx `に設定しましたが、現在、これはパッケージによって更新できる ` / usr / local / www / nginx-dist +`ディレクトリへのシンボリックリンクです将来の運用。

リンクを破棄し、リンクされていないディレクトリを再度作成する必要があります。

sudo rm /usr/local/www/nginx
sudo mkdir /usr/local/www/nginx

Webサーバーをまだテストする必要があるため、 `+ index.html`ファイルを新しいWebルートにコピーできます。

sudo cp /usr/local/www/nginx-dist/index.html /usr/local/www/nginx

ここにいる間に、PHP-FPMにリクエストを渡すNginxの機能をテストするために使用できる一時的な `+ info.php `ファイルも作成する必要があります。 ` sudo +`権限でドキュメントルート内にファイルを作成します。

sudo vi /usr/local/www/nginx/info.php

ファイルに、次の内容を入力します。 これにより、PHP設定に関する情報を含むHTMLページが生成されます。

<?php phpinfo(); ?>

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

これで、新しい構成を利用するためにNginxを再起動する準備が整いました。 まず、次のように入力して、構成ファイルの構文エラーをテストします。

sudo nginx -t

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

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を再起動できます。

sudo service nginx restart

結果のテスト

Webスタックが完成しました。 あとは、テストするだけです。

Webブラウザで、ベースドメイン名またはサーバーのIPアドレスに移動することから始めます。

http://

コピーした `+ index.html +`ファイルの内容が表示されます。 これは次のようになります。

image:https://assets.digitalocean.com/articles/freebsd_lemp/default_index.png [FreeBSD Nginxデフォルトインデックス]

これは、Nginxが稼働中であり、シンプルなHTMLページを提供できることを示しています。

次に、作成した `+ info.php `ファイルをチェックアウトする必要があります。 ブラウザで、ドメイン名またはサーバーIPアドレスにアクセスし、その後に「 / info.php」を入力します。

http:///info.php

次のような生成されたPHP情報ページが表示されます。

image:https://assets.digitalocean.com/articles/freebsd lemp / phpinfo.png [FreeBSD phpinfoページ]

このページが表示されたら、FreeBSDサーバーでFEMPスタックが正常に構成されています。

設定をテストした後、ドキュメントルートから `+ info.php +`ファイルを削除することをお勧めします。インストールに関する機密情報を漏らす可能性があるためです。

sudo rm /usr/local/www/nginx/info.php

このファイルは、いつでも簡単に再作成できます。

結論

これで、動的なPHPコンテンツを処理し、MySQLを使用してデータを保存できるNginxを搭載した完全に機能するWebサーバーが必要になります。 この構成は、他のさまざまな構成およびWebアプリケーションのベースとして使用できます。