Symfony 应用程序在 docker swarm 模式下具有多个副本,会话问题?

问题描述 投票:0回答:1

我在使用 docker swarm 和 nginx 作为反向代理的生产环境中使用 Symfony 7 应用程序时遇到问题。

使用 1 个副本一切正常,但是 使用 2 个或更多副本我的应用程序启动但我无法登录它。该应用程序使用带有登录表单的标准 Symfony 方法 (https://symfony.com/doc/current/security.html#form-login)。 应用程序映像是从 php:8.2-apache 构建的,Apache 当然是应用程序容器内运行的 Web 服务器。

这是我的配置(我省略了不相关的内容):

swarm_stack.yml

services:
    nginx:
        image: ghcr.io/mygh/nginx:docker
        deploy:
            replicas: 1
        ports:
            - "80:80"
            - "443:443"

    backend_app:
        image: ghcr.io/mygh/backend:docker
        deploy:
            replicas: 2
        ports:
            - "8000:80"

nginx.conf

server {
    listen              80;
    listen              443 ssl;
    server_name  backendapp.com;

    location / {
        proxy_pass http://backend_app:80/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
    }
}

我在想,由于登录失败,副本/工作节点之间共享会话可能存在问题?或者问题可能出在方法本身?这是我第一次尝试以这种方式配置堆栈。

php symfony nginx docker-swarm nginx-reverse-proxy
1个回答
0
投票

好吧,这是一个会话共享问题。由于 Nginx Plus(及其粘性会话)对于我的应用程序来说“有点”太贵了,所以我选择配置 Symfony 将会话存储在 Redis 中。就像魅力一样。

再次感谢@NicoHaase 指出了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.