AmazonLinux2へのnginx + php-fpm + php7.2セットアップメモ

AmazonLinux2へのnginx + php-fpm + php7.2セットアップメモ:


目的

EC2インスタンス(Amazon Linux 2)に

  • nginx (1.12)
  • php (7.2 OPcache有効)
  • php-fpm
をインストールする。


ベース環境

OS : Amazon Linux 2

(AMI ID : amzn2-ami-hvm-2.0.20181114-x86_64-gp2 (ami-0a2de1c3b415889d2))


OS初期設定

# パッケージ更新 
$ sudo yum update -y 
 
# タイムゾーン設定・確認 
$ timedatectl status 
      Local time: Fri 2018-11-23 05:56:04 UTC 
  Universal time: Fri 2018-11-23 05:56:04 UTC 
        RTC time: Fri 2018-11-23 05:56:04 
       Time zone: n/a (UTC, +0000) 
     NTP enabled: yes 
NTP synchronized: no 
 RTC in local TZ: no 
      DST active: n/a 
 
$ sudo timedatectl set-timezone Asia/Tokyo 
 
$ timedatectl status 
      Local time: Fri 2018-11-23 14:56:43 JST 
  Universal time: Fri 2018-11-23 05:56:43 UTC 
        RTC time: Fri 2018-11-23 05:56:43 
       Time zone: Asia/Tokyo (JST, +0900) 
     NTP enabled: yes 
NTP synchronized: no 
 RTC in local TZ: no 
      DST active: n/a 
 
# ロケール、キーボードレイアウト設定・確認 
$ localectl status 
   System Locale: LANG=en_US.UTF-8 
       VC Keymap: n/a 
      X11 Layout: n/a 
 
$ sudo localectl set-locale LANG=ja_JP.UTF-8 
$ sudo localectl set-keymap jp106 
 
$ localectl status 
   System Locale: LANG=ja_JP.UTF-8 
       VC Keymap: jp106 
      X11 Layout: jp 
       X11 Model: jp106 
     X11 Options: terminate:ctrl_alt_bksp 


各種インストール


nginx / php-fpm / phpをインストール


Extras Libraryで利用可能なtopicを確認

$ amazon-linux-extras list 
(nginx1.12とphp7.2が利用可能であることを確認する)


nginxをインストール

$ amazon-linux-extras info nginx1.12 
nginx1.12 recommends nginx                      # yum install nginx 
 
$ sudo amazon-linux-extras install -y nginx1.12 
 
$ nginx -v 
nginx version: nginx/1.12.2 


php/php-fpmをインストール

$ amazon-linux-extras info php7.2 
php7.2 recommends php-cli                    # yum install php-cli 
php7.2 recommends php-pdo                    # yum install php-pdo 
php7.2 recommends php-fpm                    # yum install php-fpm 
php7.2 recommends php-json                   # yum install php-json 
php7.2 recommends php-mysqlnd                # yum install php-mysqlnd 
 
$ sudo amazon-linux-extras install -y php7.2 
 
# 他に必要なライブラリがあれば個別にインストール 
$ sudo yum install -y php-mbstring php-opcache 
 
$ php -v 
PHP 7.2.11 (cli) (built: Oct 24 2018 17:51:11) ( NTS ) 
Copyright (c) 1997-2018 The PHP Group 
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies 
    with Zend OPcache v7.2.11, Copyright (c) 1999-2018, by Zend Technologies 
 
$ php-fpm -v 
PHP 7.2.11 (fpm-fcgi) (built: Oct 24 2018 17:55:29) 
Copyright (c) 1997-2018 The PHP Group 
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies 
    with Zend OPcache v7.2.11, Copyright (c) 1999-2018, by Zend Technologies 


設定変更


php-fpm設定


/etc/php-fpm.d/www.conf

nginxユーザ、nginxグループで実行されるように修正

;user = apache 
user = nginx 
;group = apache 
group = nginx 
UNIXドメインソケットで通信するように修正(Amazon Linux 2では変更の必要なし)

;listen = 127.0.0.1:9000 
listen = /run/php-fpm/php-fpm.sock 
UNIXドメインソケットがnginxユーザ、nginxグループで作成されるように修正

;listen.owner = nobody 
listen.owner = nginx 
;listen.group = nobody 
listen.group = nginx 


php設定


/etc/php.ini

; HTTPレスポンス内のPHPバージョン情報を非表示にする 
;expose_php = On 
expose_php = Off 
 
; EC2インスタンスのスペックにあわせて利用メモリ上限を設定 
;memory_limit = 128M 
memory_limit = 1024M 
 
; POSTサイズ上限、ファイルアップロードサイズ上限は必要に応じて変更 
post_max_size = 8M 
upload_max_filesize = 2M 
 
; タイムゾーンを日本標準時間に変更 
date.timezone = Asia/Tokyo 
 
; mbstringのデフォルト言語を日本語に変更 
mbstring.language = Japanese 
; HTTP入力文字のエンコーディングを内部文字のエンコーディングに自動変換しない 
mbstring.encoding_translation = Off 
; 文字コードを自動検出する際の優先順位を設定 
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII 
OPcache実行時設定追加(Amazon Linux 2では不要)
http://php.net/manual/ja/opcache.configuration.php

zend_extension=/[それぞれのPHPのextensionのパス]/php_opcache.dll 
 
[opcache] 
opcache.enable=1 
opcache.enable_cli=1 
opcache.memory_consumption=128 
opcache.interned_strings_buffer=8 
opcache.max_accelerated_files=4000 
opcache.revalidate_freq=60 
opcache.fast_shutdown=1 # PHP 7.2.0で削除 


nginx設定


/etc/nginx/nginx.conf

location ~ .php$ { 
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 
    include fastcgi_params; 
} 
(AmazonLinux2では不要)

拡張子が「.php」をアクセス対象に追加(serverディレクティブに追加)

UNIXドメインソケットを利用するため、ソケットファイルのパスを設定


/etc/nginx/conf.d/php.conf

(AmazonLinux2では変更不要)


/etc/nginx/conf.d/default.conf (新規ファイル)

httpブロックにセキュリティ関連の設定を追加

server_tokens off; 


/etc/nginx/default.d/security.conf (新規ファイル)

serverブロックにセキュリティ関連の設定を追加

etag off; 
add_header X-Frame-Options SAMEORIGIN; 
add_header X-Content-Type-Options nosniff; 
add_header X-XSS-Protection "1; mode=block"; 
#add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; img-src 'self'; style-src 'self'; child-src 'none' object-src 'none'"; 
(Content-Security-Policyは各サイトに合わせた設定を追加すること)


nginx設定構文チェック

sudo nginx -t 


各サービスの起動、自動起動設定、起動確認

sudo systemctl start php-fpm 
sudo systemctl start nginx 
 
sudo systemctl enable php-fpm 
sudo systemctl enable nginx 
 
systemctl status php-fpm 
systemctl status nginx 


nginxとphp-fpmのUNIXドメインソケット接続確認

$ netstat -al --protocol=unix |egrep "Proto|fpm" 
Proto RefCnt Flags       Type       State         I-Node   Path 
unix  2      [ ACC ]     STREAM     LISTENING     61433    /run/php-fpm/www.sock 


ブラウザ表示確認

echo '<?php phpinfo(); ?>' | sudo tee /usr/share/nginx/html/phpinfo.php 
ブラウザから「http://[domain name]/phpinfo.php」にアクセスし、

PHPの設定内容が表示されることを確認する。

※ OPcacheが有効であることを確認

Opcode Caching : Up and Running

Optimization : Enabled


参考サイト

https://ninolog.com/set-amazonlinux2-aws-ec2/
https://ninolog.com/set-amazonlinux2-nginx-phpfpm-aws-ec2/

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)