AWS迁移 – 应用程序方面的改进点
大纲
这是在以前将Web应用从本地服务器迁移到AWS时所采取的步骤。
在ELB之间
以前我们是直接从CDN(Akamai)查看Web服务器的,现在我们在它们之间添加了ELB。
之前:Akamai转向Apache,然后连接到应用程序(php)。
现在:Akamai转向ELB,然后连接到Apache,最后连接到应用程序(php)。
SSL证书已从Apache迁移到ELB。
因为ELB被夹住的影响
以下部分对判断通信是否为SSL产生了影响。
从互联网到ELB之间是使用SSL通信的,
但是从ELB到EC2之间是使用80端口进行通信的,所以以下代码将无法正常运行。
if($_SERVER["SERVER_PORT"] == 443){
echo "SSL通信です";
}
如果要进行相同的判断,则需要编写以下类似的代码。
if($_SERVER["HTTP_X_FORWARDED_PORT"] == 443){
echo "SSL通信です";
}
如果修缮范围较广,以下的代码也可以实现。
$_SERVER['SERVER_PORT'] = $_SERVER["HTTP_X_FORWARDED_PORT"];
if($_SERVER["SERVER_PORT"] == 443){
echo "SSL通信です";
}
以私有域名管理资源的IP。
将会话服务器切换到Elasticache后,我们重新审视了IP的管理方法。
过去,我们直接在php.ini中写入缓存服务器的终点,但现在我们改为使用route53的私有域名。
通过这样做,即使会话服务器的终点发生更改,只需要修改Route53的设置,而不需要修改应用程序或服务器的配置。
在Hosted zones中添加记录,方法如下。
prd-web-redis.private.XXX.jp
CNAME
prd-redis.XXXXX.cache.amazonaws.com (redisのプライマリエンドポイント)
在 Route53 的私有域名上将终端点设置为运作方法对于 RDS 也是有效的。
终端点的变更在正式运行时并不频繁,但在开发过程中往往会经常发生。
将会话保存位置更改为Redis。
最初使用elasticache的时候,我们选择了memcached来作为php会话的存储位置。然而,由于memcached没有复制功能,我们改用了Redis。
sudo yum --enablerepo=epel install php-pecl-redis
sudo vi /etc/php.ini
; session.save_handler = files
; session.save_path = "/var/lib/php/session"
----------------------------------------
sudo vi /etc/php.d/redis.ini
session.save_handler = redis
session.save_path = "tcp://prd-web-redis.private.XXX.jp:6379"
确认值是否保存在Redis中。
使用redis cli来确认elasticache中是否存储了值。
※还可以使用telnet等其他方法来进行确认。
sudo yum --enablerepo=epel install redis
#以下のコマンドで値が保存されていることを確認した
redis-cli -c -h prd-web-redis.private.XXX.jp -p 6379
keys *
get キー名