Elasticache session_start():无法创建会话ID

时间:2017-05-06 20:28:51

标签: php amazon-web-services memcached amazon-elasticache

我正在尝试通过AWS Elasticache将PHP7 $_SESSION['...']信息(来自ElasticBeanstalk应用程序)存储在集中式Memcached群集中。

以下是我要采取的步骤:

  1. 请注意ElasticBeanstalk的安全组
  2. 在AWS控制台中,导航至服务> ElastiCache并点击“立即开始”
  3. 在“群集引擎”下,选中“Memcached”
  4. 在“Memcached设置”下输入“名称”的“会话”并保留所有默认设置(在完成此概念验证后将更具体)
  5. 现在在仪表板上,等待“status”“创建”,然后展开行并记下公共dns(请注意,添加步骤1中的安全组的步骤也将在此处...我现在这样做btw)
  6. 在本地计算机上,创建名为sample
  7. 的目录
  8. sample下,使用以下内容创建.ebextensions/elasticcache-sessions.config
  9. files:
      "/etc/php.d/project.ini" :
        mode: "000644"
        owner: root
        group: root
        content: |
          [Session]
          session.save_handler = memcached
          session.save_path = "tcp://dns-noted-from-step-4:11211"

    1. 仍在sample下,使用以下内容创建index.php

      header('Content-Type: text/plain');
      session_start();
      if(!isset($_SESSION['visit']))
      {
          echo "This is the first time you're visiting this server\n";
          $_SESSION['visit'] = 0;
      }
      else
              echo "Your number of visits: ".$_SESSION['visit'] . "\n";
      
      $_SESSION['visit']++;
      
      echo "Server IP: ".$_SERVER['SERVER_ADDR'] . "\n";
      echo "Client IP: ".$_SERVER['REMOTE_ADDR'] . "\n";
      print_r($_COOKIE);
      
    2. sample目录压缩为.zip文件并将其部署到步骤1中提到的Beanstalk应用程序

    3. 在您的浏览器中访问/sample/index.php并抛出... PHP Fatal error: session_start(): Failed to create session ID: memcached.
    4. 如果我SSH到属于Beanstalk的EC2实例,我可以看到安装了PHP7。如果我php --ini | grep memcached,则会有结果。我也能够验证我写的ebextension是否正在应用。准备好把头撞在墙上。感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

很长时间以来,我们都在碰壁时碰到了同样的问题。 我们发现Apache只是没有向Elasticache发出网络请求。

因此,深入研究SELinux,发现运行它可以解决此问题:

setsebool -P httpd_can_network_connect 1