繁体   English   中英

AWS弹性豆茎Nginx PHP session丢失

[英]AWS elastic beanstalk Nginx PHP session lost

我最近开始使用新的 AWS Elasticbeanstalk Nginx(Amazon Linux 2)。 在 Elasticbeanstalk 上进行任何部署或重新启动后,我注意到 PHP session 丢失(如果用户已登录,他将被注销)。 Previously I was using Amazon Linux 1 version which was running on Apache and haven't faced this issue, is there any way to keep PHP session after?

这是由于 Amazon Linux 2 发生了变化,其中 PHP 现在由 PHP-FPM systemd 服务托管(以前的 Amazon Linux 版本没有使用 PHP-FPM 系统)。 在 ElasticBeanstalk 提供的默认 PHP 配置中跟踪会话的方法是使用/tmp目录中的文件。 但是,systemd 的“PrivateTmp”默认启用,它为 PHP-FPM 服务在运行时创建一个唯一的目录。 一旦 PHP-FPM 服务停止,systemd 就会删除这个特殊的“私有” /tmp ,这会删除所有 session 文件。

每当 PHP ElasticBeanstalk 部署新版本时,此 PHP-FPM 服务就会停止并重新启动,从而导致会话丢失。

有几个选项可以解决这个问题:

-> 配置 PHP 使用 memcached/redis/etc 之类的东西来管理会话,而不是使用文件系统。 这可能是最安全的解决方案。

或者,

-> 配置您的 Amazon Linux 2 ElasticBeanstalk 实例以处理/tmp目录中的这些 session 文件,而不是 systemd 提供的“私有” /tmp目录。

这可以通过将以下部署后配置脚本添加到路径下的项目中轻松完成: .platform/hooks/postdeploy/phpfpm_noprivatetmp.sh

#!/bin/bash -e

# change PrivateTmp from true to false, then reload/restart the systemd service
sed -i 's/PrivateTmp=true/PrivateTmp=false/' /usr/lib/systemd/system/php-fpm.service

# wait a moment...
sleep 2
sudo systemctl daemon-reload

# wait a moment...
sleep 2
sudo systemctl restart php-fpm.service

这将禁用“PrivateTmp”功能,导致 session 文件存储在“真实” /tmp目录中,并且部署站点的新版本将不再导致所有人登出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM