缺少具有多个 EC2 实例的 Drupal 7 + AWS aws 负载均衡器 + 临时文件夹文件

Drupal 7 + AWS aws load balancer with muliple instance of EC2 + temp folder files is missing

我正在使用带有弹性负载均衡器的 AWS EC2 服务。当我尝试使用 plupload 上传多张图片时,出现 return 错误:

The specified file temporary://p1ccn4f5o41dmh1qvmefo1ohv1dq15.tmp could not be copied, because no file by that name exists. Please check that you supplied the correct filename. The website encountered an unexpected error. Please try again later.

我正在为我的 Drupal 站点并行使用 2 个 EC2 服务器,并在负载 AWS 上创建新的 2 个 EC2 实例。所以当站点 运行 满载时,有 4 台 EC2 服务器 运行ning.

仅当 2 个或更多 Ec2 实例正在 运行并且 tmp 文件夹在单个 EC2 服务器上正常工作时才会出现此问题。

如何为多实例网站配置tmp?

来自 OP 评论的信息:
我正在使用带有 strike $_SESSION 的 ELB 来维护用户与特定 EC2 实例的连接。

我研究了 AWS 服务上的多个文档,发现我们需要维护与特定 EC2 实例的用户连接。

Classic Load Balancer 将每个请求独立路由到负载最小的已注册实例。但是,您可以使用粘性会话功能(也称为会话亲和性),它使负载均衡器能够将用户会话绑定到特定实例。这确保了会话期间来自用户的所有请求都发送到同一个实例。

管理用户请求和 EC2 实例之间的会话,我们需要配置粘性会话。

管理粘性会话的关键是确定您的负载均衡器应将用户请求持续路由到同一实例多长时间。如果您的应用程序有自己的会话 cookie,则您可以配置 Elastic Load Balancing,使会话 cookie 遵循应用程序的会话 cookie 指定的持续时间。如果您的应用程序没有自己的会话 cookie,那么您可以配置 Elastic Load Balancing 以通过指定您自己的粘性持续时间来创建会话 cookie。

Elastic Load Balancing 创建一个名为 AWSELB 的 cookie,用于将会话映射到实例。

Use the following create-lb-cookie-stickiness-policy command to create a load balancer-generated cookie stickiness policy with a cookie expiration period of 60 seconds:

aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60

Use the following set-load-balancer-policies-of-listener command to enable session stickiness for the specified load balancer:

aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-duration-cookie-policy

Note

The set-load-balancer-policies-of-listener command replaces the current set of policies associated with the specified load balancer port. Every time you use this command, specify the --policy-names option to list all policies to enable.

(Optional) Use the following describe-load-balancers command to verify that the policy is enabled:

aws elb describe-load-balancers --load-balancer-name my-loadbalancer

The response includes the following information, which shows that the policy is enabled for the listener on the specified port:

{
    "LoadBalancerDescriptions": [
        {
            ...
            "ListenerDescriptions": [
                {
                    "Listener": {
                        "InstancePort": 443, 
                        "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", 
                        "LoadBalancerPort": 443, 
                        "Protocol": "HTTPS", 
                        "InstanceProtocol": "HTTPS"
                    }, 
                    "PolicyNames": [
                        "my-duration-cookie-policy", 
                        "ELBSecurityPolicy-2016-08"
                    ]
                },
                ...
            ],            
            ...
            "Policies": {
                "LBCookieStickinessPolicies": [
                 {
                        "PolicyName": "my-duration-cookie-policy", 
                        "CookieExpirationPeriod": 60
                    }

                ], 
                "AppCookieStickinessPolicies": [], 
                "OtherPolicies": [
                    "ELBSecurityPolicy-2016-08"
                ]
            },
            ...
        }
    ]
}