PHP/Swoole Http Server - 如何动态加载ssl?

标签 php ssl swoole

我需要根据进程请求动态加载不同的 ssl 证书。我尝试像下面的代码那样做,但服务器仍在处理请求时加载 cert1 证书,而不是我在代码中尝试做的 cert2。

如何即时动态地重新加载不同的证书?可能吗?

代码示例:

<?php

require 'vendor/autoload.php';


$server = new swoole_http_server("192.168.10.10", 443, SWOOLE_BASE, SWOOLE_SOCK_TCP | SWOOLE_SSL);

// setup the location of ssl cert files and key files
$ssl_dir = __DIR__.'/ssl_certs';
$server->set([
    'max_conn'           => 500,
    'daemonize'          => false,
    'dispatch_mode'      => 2,
    'buffer_output_size' => 2 * 1024 * 1024,
    'ssl_cert_file' => $ssl_dir . '/cert1.local.crt',
    'ssl_key_file' => $ssl_dir . '/cert1.local.key',
    'open_http2_protocol' => true, // Enable HTTP2 protocol
]);

$server->on('request', function ($request, $response) use ($server) {
    $server->set([
        'ssl_cert_file' => $ssl_dir . '/cert2.local.crt',
        'ssl_key_file' => $ssl_dir . '/cert2.local.key',
    ]);
    $response->end("<h1>Hello World. #".rand(1000, 9999)."</h1>");
});

$server->start();

最佳答案

不幸的是,您不能即时更改 $server 配置。

一个选项是在具有不同设置的多个端口上运行 Swoole 服务器:

$port1 = $server->listen("127.0.0.1", 9501, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$port2 = $server->listen("127.0.0.1", 9502, SWOOLE_SOCK_TCP | SWOOLE_SSL);

$port1->set([
    'open_eof_split' => true,
    'package_eof' => "\r\n",
    'ssl_cert_file' => 'ssl1.cert',
    'ssl_key_file' => 'ssl1.key',
]);

$port2->set([
    'open_eof_split' => true,
    'package_eof' => "\r\n",
    'ssl_cert_file' => 'ssl2.cert',
    'ssl_key_file' => 'ssl2.key',
]);

之后您可以在 Nginx 中为不同的 URI 创建不同的规则来处理流量并将其重定向到正确的 Swoole 端口。

关于PHP/Swoole Http Server - 如何动态加载ssl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54382542/

相关文章:

java - CentOS 7 上的 TomEE 在 CentOS 更新后无法通过 JDBC 连接到 Microsoft SQL Server

javascript - 安装 SSL 后幻灯片无法正常工作

php - 如何在 swoole 上执行经典的 php exit() ?

php - 如何在Sublime文字代码段中转义$

php - 连接表错误未定义属性

java - Android 使用证书建立 HTTPSConnection

php - 在 Docker 中与 PHP Swoole 一起运行 Blackfire 时出现问题

php - 使用 laravel api 在 swoole 上启用 https

PHP Opcache 替换策略

php - 我在哪里可以找到一个 UTF8 位到字符表以将例如 "ñ"转换为 "ñ"?