AWS(Amazon Linux)にnginxをインストール

前回の記事でElasticsearchをインストールしたので、ドキュメントを登録していったりするかと思いきや、他の必要なミドルウェアをインストールします。

今回はnginx。
併せてFastCGIの設定も行います。

nginxとは

“エンジンエックス”と読むのですが、Webサーバーです。
つい数年前までWebサーバーと言えばApacheだったのですが、Webサイトへのアクセス増加や、Webサーバーの役割がWebページのホスティングだけでなくWebAPIを提供することなどに広がってきたことで、高パフォーマンスなWebサーバーが求められるようになりました。

そのような中で登場したのがnginxです。

インストール

nginx

Amazon Linux向けにはnginxのパッケージが用意されていますので、それをインストールします。
Amazon Linux...なんか避けていましたが、便利な様子です。
後述するPHPにちても、過去や最新バージョンのパッケージが揃っているなど一般的なアプリケーションは準備されています。
CentOSのようにremiリポジトリを追加して・・・とかいう心配はあまり要らないようです。

まだfasc-cgiの設定などもしないといけないので今起動ししても仕方ないけれど、動作確認のために起動します。

自動起動の設定

PHP

php7.0をインストールします。
もうすぐphp7.2も出ようかという昨今ですが、互換性重視でphp7.0を選択しました。
必要そうなパッケージを一気にインストールします。

php-fpm

先程インストールしたphp7.0に合わせたphp-fpmをインストールします。

起動しても・・・起動します。

・・・設定を変更しないといけないのを思い出しました。
www.confにあるユーザーの設定を変更しなくてはいけません。
デフォルトではapacheになっています。

user = apache
group = apache
という箇所があるので、それぞれapacheの箇所をnginxに書き換えます。

ついでに、ユニックスドメインソケットを使うように変更します。
理由はその方が速いから、というだけです。
listen = 127.0.0.1:9000
という箇所を
listen = /var/run/php-fpm.70.sock

詳細はおいておいて、ここで指定したファイルを通じてphp-fpmと通信するわけです。
で、そのファイルがnginxから読み取れるように、ファイル作成ユーザーも設定します。
;listen.owner = nobody
;listen.group = nobody
をそれぞれ、
listen.owner = nginx
listen.group = nginx
に変更します。
コメント行を表す先頭のセミコロンも削除しているのでお忘れなく。

※listen.ownerとlisten.groupを変更せずにphp-fpmを起動してしまった場合、/var/run/php-fpm.70.sockがrootユーザーで作成されてしまいます。
そうすると、後から変更してもすでにrootユーザで作成されたファイルがあるので、php-fpmの起動に失敗するかもしれません。
一度、/var/run/php-fpm.70.sockを削除してから再度起動してみてください。

※サイトによっては/tmpにこのファイルを指定するように指示するサイトもあるようですが、うまく動かないケースがあるようです

気を取り直して、再度起動。

うまくいきました。

php-fpmについても自動起動の設定をします。

※しかし後で設定が不足していることが分かります

nginxの設定

nginxの設定ファイルもバックアップを取ります。

律儀にnginx.conf.defaultというファイルがありますが、無視してバックアップ。

httpディレクティブに以下のfastcgi設定を追加

httpディレクティブにindexの設定もあるので、index.phpを追記しておきます。

後で以下のlocationディレクティブを、各バーチャルホストのserverディレクティブに追加します。
が、とりあえずnginx.confにあるデフォルトのserverディレクティブに記述してエラーがないか、php-fpmがちゃんと動作しているかを確認します。

そしてnginxを再起動。

無事起動しました。

phpの動作についても確認します。
nginxのデフォルトのドキュメントルートは
/usr/share/nginx/html
に設定されていました。
そこにtest.phpという名前で以下の内容のファイルを作成します。

そして、http://ホスト名/test.phpへアクセス。

・・・失敗です。
nginxか出力しているエラーなので、nginxのログを見てみます。

fastcgi://127.0.0.1:9000って・・・ユニックスドメインソケットを使うように設定したはずなんですけれど。

ところで、ちょっと見慣れないファイルがあります。
いや、別に元々ある設定ファイルなのですが、変更したことがないのでスルーしていました。

nginx.confのinclude /etc/nginx/conf.d/*.conf;という設定によって、このディレクトリにある設定ファイルが読み込まれています。
*.confが読み込まれるので、使われているのはphp-fpm.confの方です。

この、php-fpm.confの記述は以下のようになっています。

ちょっと見るからに怪しいんですけど・・・
nginxに出力されていたエラーupstream: "fastcgi://127.0.0.1:9000"とも合致します。
CentOSにremiリポジトリからインストールした際にはphp-fpm.confにこのディレクティブはなかったので、完全に見落としていました。

server 127.0.0.1:9000;

server unix:/var/run/php-fpm.70.sock;
に書き換えてphp-fpmを再起動します。

さて、ここで問題なくphp-fpmを使ったFastCGIで動いているかどうか確認してみます。
php-fpmのログは/var/log/php-fpm/7.0/error.logに出力されています。

・・・アクセスしてどうかなど、何も出ていません。
アクセスログが出力されるように設定します。

以下のページを参考にしました。

ドキュメント読めば設定方法が分かるかと思いましたが、この設定の書き方はちょっと分かりにくい。

www.conf<に設定を追加します。 ;prefix = /path/to/pools/$pool
という行がありますので、これを変更してログの出力先ディレクトリを指定します。
prefix = /var/log/php-fpm/7.0/$pool.access.log
に変更します。
設定ファイルの上の方で[www]という記載がありますが、これが$poolに入りますので、/var/log/php-fpm/7.0/www.access.logというディレクトリに出力されます。
事前にディレクトリを作成しておきます。

そして再起動

そしてアクセス。

無事表示されました。
これで、/var/log/php-fpm/7.0/www.access.logにもアクセスログが・・・出ていません。
出ていませんよ。
php-fpm関連のエラーを修正してphpが実行されるようになったので、FascCGI経由で実行されていることは間違いないようですが、アクセスログが出ていません。
これはちょっとまたいずれ解決するということで・・・

まだMariaDB入れないといけなかったのを忘れていました。

関連記事AWSにElasticsearch 5.6をインストール

楽天市場

Amazon.co.jpアソシエイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)