もくじ
構成
- ロードバランサがあり、配下にEC2が複数台ある
- EC2のセッションはElasticacheに保存する
関連
EC2側設定
Apache, PHPのインストール
# yum install httpd php php-devel
Redisインストール
# amazon-linux-extras install redis4.0
php-pecl-redisのインストール
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # yum install --enablerepo=epel php-pecl-redis
タイムゾーン設定
# vi /etc/php.ini [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = date.timezone = "Asia/Tokyo" ←追加して下さい
PHP セッション管理をRedis(AWS ElastiCache)に任せます
# vi /etc/httpd/conf.d/php.conf (略) #php_value session.save_handler "files" #php_value session.save_path "/var/lib/php/session" php_value session.save_handler "redis" php_value session.save_path "tcp://プライマリエンドポイント:6379" 具体例) #php_value session.save_handler "files" #php_value session.save_path "/var/lib/php/session" php_value session.save_handler "redis" php_value session.save_path "tcp://test-redis.pgyqgq.ng.0001.apne1.cache.amazonaws.com:6379"
WEBサーバを再起動して反映させて下さい。
# systemctl restart httpd
WEBサーバとElastiCacheの疎通確認
アクセス出来るか確認します。
# redis-cli -h test-redis.pgyqgq.ng.0001.apne1.cache.amazonaws.com -p 6379
※アクセス出来ない場合はセキュリティグループの設定が怪しいです、
ご確認下さい。
アクセス出来たらexitして下さい。
test-redis.pgyqgq.ng.0001.apne1.cache.amazonaws.com:6379> exit
動作テスト
# vi /var/www/html/sess.php <?php session_start(); if($_SESSION['count'] == "") { $_SESSION['count'] = 1; echo $_SESSION['count']; } else { echo $_SESSION['count']++; } echo "<hr/>"; echo gethostname();
http://ロードバランサIP/sess.php
# redis-cli -h test-redis.pgyqgq.ng.0001.apne1.cache.amazonaws.com -p 6379
URLにアクセス毎にセッションが更新されることを確認出来ます。
http://ロードバランサIP/sess.php
http://ロードバランサIP/sess.php 1533794959.273652 [0 172.31.26.240:56748] "get" "PHPREDIS_SESSION:0c830repjnj23kvoub11m10mn1" 1533794959.274091 [0 172.31.26.240:56748] "setex" "PHPREDIS_SESSION:0c830repjnj23kvoub11m10mn1" "1440" "count|i:41;"
※動作状況を確認できます。