PHP/Swoole Http Server - как я могу динамически загрузить ssl?
Мне нужно загрузить различные сертификаты 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();
0 ответов
К сожалению, вы не можете изменить конфигурацию $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',
]);
После этого вы можете создавать разные правила для разных URI в Nginx, чтобы обрабатывать трафик и перенаправлять его на соответствующий порт Swoole.
Вам просто нужно несколько сертификатов для предоставления SSL для разных доменных имен?
Если это так, вы можете просто разместить несколько доменов в одном сертификате. Это снимет необходимость переключать сертификаты.