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 キー名

广告
将在 10 秒后关闭
bannerAds