当前位置: 首页 > 知识库问答 >
问题:

Symfony Mercure连接问题。使用HTTPS而不是HTTP

章宏恺
2023-03-14

我试图在两个docker容器之间建立连接。一个是nginx服务器Symfony应用程序,另一个是Mercure。

我的应用程序工作正常,docker-comment构建也没有任何问题。问题是,当我试图测试它,并试图从Symfony应用程序发布一些东西到Mercure时,我得到了500个内部服务器错误,其中包含“未能发送更新”消息。

在堆栈跟踪中,我可以看到TransportException错误,与.env文件中的env变量不同。应用程序正在尝试使用HTTPS而不是.env文件中定义的HTTP。

Symfony\Component\HttpClient\Exception\TransportException:的SSL连接错误“https://mercure/.well-known/mercure". 位于vendor/symfony/http client/Chunk/ErrorChunk.php:65

###> symfony/mercure-bundle ###
# See https://symfony.com/doc/current/mercure.html#configuration

# The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
MERCURE_URL=http://mercure/.well-known/mercure

# The public URL of the Mercure hub, used by the browser to connect
MERCURE_PUBLIC_URL=http://localhost:9090/.well-known/mercure

MERCURE_PUBLISH_URL=http://mercure/.well-known/mercure

# The secret used to sign the JWTs
MERCURE_JWT_SECRET=<Proper JWT Token is here>
###< symfony/mercure-bundle ###

在Mercure容器中,我得到:

mercure_1   | {"level":"debug","ts":1619097073.714639,"logger":"http.stdlib","msg":"http: TLS handshake error from 172.21.0.5:57420: no certificate available for 'mercure'"}

我的docker compose配置

services:

    api:
        build:
            context: ./api
            dockerfile: Dockerfile
        volumes:
            - ./api:/app
            - ./api/storage/logs/php-fpm:/var/log/php-fpm
        networks:
            - redio_network
        ports:
            - "7000:80"
        environment:
            <<: *common-variables

    mercure:
        image: dunglas/mercure
        environment:
            MERCURE_PUBLISHER_JWT_KEY: '!ChangeMe!'
            MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeMe!'
        ports:
            - "9090:80"
        networks:
            - redio_network
        volumes:
            - ./_data/caddy_data:/data
            - ./_data/caddy_config:/config
        command: /usr/bin/caddy run -config /etc/caddy/Caddyfile.dev

这是我的控制器,当我发布到Mercure主题时:

class ChatController extends AbstractController
{
    /**
     * @Route("/push", name="push")
     * @param Request $request
     * @param HubInterface $publisher
     * @return Response
     */
    public function push(Request $request, HubInterface $publisher): Response
    {
        $publisher->publish(new Update(
            '/chat',
            json_encode(['message' => 'hello!'])
        ));

        return $this->json('Done');
    }
}

共有1个答案

子车宏浚
2023-03-14

好吧,我找到了。如果有人有同样的问题,请将SERVER_NAME变量添加到docker-comment配置中。Mercure使用默认设置为强制HTTPS的Caddy服务器。

mercure:
    image: dunglas/mercure
    environment:
        MERCURE_PUBLISHER_JWT_KEY: '!ChangeMe!'
        MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeMe!'
        SERVER_NAME: ":80"
 类似资料:
  • 我的eclipse安装始终使用https协议下载存储库结构。问题是我的合作代理不允许我在这个url上使用https。如何强制m2e使用http? 我尝试了m2e的不同外部maven安装,但没有成功。只有在使用CLI中的外部maven(使用http)时,它才起作用。

  • 我正在尝试构建react原生android应用程序,作为一种依赖,我看到我有gradle,但它无法在构建时加载。错误消息: 问题很明显,我坐在公司代理后面,阻止任何像这样的错误HTTPS连接。所以我的问题是:如何强制gradle使用HTTP加载这些文件?这些属性应该放在哪里(哪一个gradle文件,即gradle.properties)? P. S.我已经在gradle属性文件中设置了这些: 任何

  • 问题内容: 使用由JSF,Spring和Hibernate组成的应用程序。我的示例正常运行,然后当我将class =“ org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter”更改为class =“ org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter”时,应用

  • 问题内容: 我有2个应用程序,一个是Servlet / Tomcat服务器,另一个是Android应用程序。 我想使用HttpURLConnection在两者之间发送和接收XML。 码: 现在,我需要使用SSL来发送XML以确保安全。 首先,我使用Java Keytool生成.keystore文件。 然后我将XML代码放在Tomcat的server.xml文件中以使用SSL 然后,将其更改为Htt

  • 问题内容: 我正在尝试验证目标是否公开了https Web服务。我有通过HTTP连接的代码,但不确定如何通过HTTPS连接。我已经阅读过您使用SSL,但我也阅读过它不支持证书错误。我得到的代码来自python docs: 有谁知道如何连接到HTTPS? 我已经尝试过HTTPSConenction,但是它以错误代码响应,声称httplib没有属性HTTPSConnection。我也没有socket.

  • 问题内容: 我正在做一个https帖子,但是却得到ssl异常的一个例外,不受信任的服务器证书。如果我做正常的HTTP,它工作正常。我是否必须以某种方式接受服务器证书? 问题答案: 我正在猜测,但是如果你想进行实际的握手,则必须让android知道你的证书。如果你只想接受任何内容,请使用以下伪代码通过Apache HTTP Client获得所需的内容: CustomSSLSocketFactory: