簡體   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