AmazonLinux2へのnginx + php-fpm + php7.2セットアップメモ
AmazonLinux2へのnginx + php-fpm + php7.2セットアップメモ:
EC2インスタンス(Amazon Linux 2)に
OS : Amazon Linux 2
(AMI ID : amzn2-ami-hvm-2.0.20181114-x86_64-gp2 (ami-0a2de1c3b415889d2))
(nginx1.12とphp7.2が利用可能であることを確認する)
nginxユーザ、nginxグループで実行されるように修正
UNIXドメインソケットで通信するように修正(Amazon Linux 2では変更の必要なし)
UNIXドメインソケットがnginxユーザ、nginxグループで作成されるように修正
OPcache実行時設定追加(Amazon Linux 2では不要)
http://php.net/manual/ja/opcache.configuration.php
(AmazonLinux2では不要)
拡張子が「.php」をアクセス対象に追加(serverディレクティブに追加)
UNIXドメインソケットを利用するため、ソケットファイルのパスを設定
(AmazonLinux2では変更不要)
httpブロックにセキュリティ関連の設定を追加
serverブロックにセキュリティ関連の設定を追加
(Content-Security-Policyは各サイトに合わせた設定を追加すること)
ブラウザから「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/
目的
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
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
;listen = 127.0.0.1:9000 listen = /run/php-fpm/php-fpm.sock
;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
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; }
拡張子が「.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'";
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
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/
コメント
コメントを投稿