You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony集成LocalStack SQS时无法禁用SSL?证书匹配错误求助

问题:Symfony Messenger连接LocalStack SQS时SSL禁用失效的解决办法

场景与配置

我在Symfony应用中尝试使用LocalStack搭建本地SQS服务,相关配置如下:

Docker Compose配置

services:
    php:
        container_name: php
        build:
            context: ./php
            args:
                TIMEZONE: ${TIMEZONE}
        volumes:
            - ../:/var/www/symfony:cached
            - symfony_app_var:/var/www/symfony/var
            - symfony_app_vendor:/var/www/symfony/vendor
        networks:
            - symfony_app
        extra_hosts:
            - "host.docker.internal:host-gateway"
    localstack:
        container_name: localstack
        image: localstack/localstack
        ports:
          - "4566:4566"        # main edge port for all services
          - "4510-4559:4510-4559"  # optional: service-specific ports
        environment:
          - SERVICES=sqs       # only start SQS (you can add more: s3,sns,etc.)
          - DEBUG=1
          - DATA_DIR=/tmp/localstack/data
          - LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY-}  # optional, for Pro
        volumes:
          - "./localstack:/var/lib/localstack"
          - "/var/run/docker.sock:/var/run/docker.sock"
        networks:
          - symfony_app

安装依赖

composer require symfony/amazon-sqs-messenger 

Symfony Messenger配置

framework:
    messenger:
        transports:
            async: '%env(MESSENGER_TRANSPORT_DSN)%'
            failed: 'doctrine://default?table_name=failed_messages'
            sqs_channel_manager:
              dsn: 'sqs://localstack:4566'
              serializer: App\Infrastructure\Messenger\SqsJsonSerializer
              options:
                  access_key: '%env(AWS_ACCESS_KEY_ID)%'
                  secret_key: '%env(AWS_SECRET_ACCESS_KEY)%'
                  region: '%env(AWS_REGION)%'
                  queue_name: '%env(CHANNEL_MANAGER_QUEUE_NAME)%'
                  sslmode: false

执行监听命令及错误

执行队列监听命令:

php -d memory_limit=-1 bin/console messenger:consume async sqs_channel_manager -vv

出现错误:

18:32:12 INFO      [messenger] Try #1 after 1056ms: SSL: no alternative certificate subject name matches target host name 'localstack' for "https://localstack:4566/". ["count" => 1,"delay" => 1056]

原因分析

sslmode: false选项并非用来切换HTTP/HTTPS协议,它仅控制是否验证SSL证书的有效性。Symfony的Amazon SQS Messenger传输默认会使用HTTPS协议连接,但LocalStack默认在4566端口提供的是HTTP服务,因此会出现SSL证书不匹配的错误。

解决方法

需要明确指定使用HTTP协议连接LocalStack,有两种可行方式:

方式一:在DSN中添加scheme参数

修改SQS传输的DSN,通过scheme=http强制使用HTTP协议:

sqs_channel_manager:
  dsn: 'sqs://localstack:4566?scheme=http'
  serializer: App\Infrastructure\Messenger\SqsJsonSerializer
  options:
      access_key: '%env(AWS_ACCESS_KEY_ID)%'
      secret_key: '%env(AWS_SECRET_ACCESS_KEY)%'
      region: '%env(AWS_REGION)%'
      queue_name: '%env(CHANNEL_MANAGER_QUEUE_NAME)%'

方式二:在options中指定endpoint

直接在options里配置HTTP协议的endpoint地址:

sqs_channel_manager:
  dsn: 'sqs://localstack:4566'
  serializer: App\Infrastructure\Messenger\SqsJsonSerializer
  options:
      access_key: '%env(AWS_ACCESS_KEY_ID)%'
      secret_key: '%env(AWS_SECRET_ACCESS_KEY)%'
      region: '%env(AWS_REGION)%'
      queue_name: '%env(CHANNEL_MANAGER_QUEUE_NAME)%'
      endpoint: 'http://localstack:4566'

两种方式都能强制Symfony使用HTTP连接LocalStack的SQS服务,从而避免SSL相关错误。

内容的提问来源于stack exchange,提问作者Dimitrios Desyllas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:44:51