AWS Elastic Beanstalk и сеансы PHP

В настоящее время у меня есть приложение php в разработке на экземпляре AWS EC2, но я решил переместить его в Elastic Beanstalk, чтобы воспользоваться преимуществами функции автомасштаба.

В то время как большая часть приложения быстро переместилась в новые экземпляры Elastic Beanstalk EC2, я столкнулся с проблемой в отношении сеансов php. Кажется, что путь сохранения сеанса php невосстанавливается, в соответствии со следующим сообщением, генерируемым php:

Warning: Unknown: open(/var/lib/php/5.5/session/sess_uc1dpvmoq5fikcv0q2kogker15, O_RDWR) failed: Permission denied (13) in Unknown on line 0 Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/5.5/session) in Unknown on line 0 

Есть ли способ обойти это без изменения PHP.ini или CHMODing? Я хотел бы, чтобы мое приложение запускалось на экземплярах EC2 по умолчанию для Elan Beanstalk без использования пользовательских AMI. Я надеюсь, что такое простое использование php-сессий должно быть разрешено по умолчанию!

Related of "AWS Elastic Beanstalk и сеансы PHP"

Перемещение вашего приложения в Elastic Beanstalk означает, что с этого момента ваше приложение будет запускаться на нескольких физических веб-серверах. (Это то, за что вы платите.) Это означает, что запрос с допустимым идентификатором сеанса может быть перенаправлен на сервер, который не имеет этого файла сеанса на диске (вы, похоже, используете обработчик сеанса на основе файлов, как показано в вопрос).

Раствор А (предпочтительный)
Вам необходимо хранить сеансы в общем месте, где они могут быть доступны для всех экземпляров вашего веб-сервера. Amazon обычно рекомендует DynamoDB для этого , но также может быть MySQL или Redis или даже Elastic Cache, предоставляемый AWS.

Решение B (более медленное, ненадежное, требует завершения SSL при балансировке нагрузки)
Настройте балансировщик нагрузки так, чтобы он использовал «липкие» сеансы. Это означает, что LB разворачивает пакеты HTTP (S), ищет файл cookie сеанса, а затем перенаправляет запрос на правильный веб-сервер, на котором работает сеанс.

На самом деле я нашел очень простое решение с двумя строками PHP-кода, которые работали на меня:

http://technosophos.com/2013/10/09/getting-php-sessions-work-aws-elastic-beanstalk.html

Добавьте, что ваш php и все готово.

 <?php $dir = sys_get_temp_dir(); session_save_path($dir); ?> 

Вы также можете добавить это в свой эластичный beanstalk файл project.config:

 "/etc/httpd/conf.d/php.conf" : content: | php_value session.save_path "/tmp" 

который просто установит путь сохранения сеанса для вас