это мой сценарий: у меня есть приложение Laravel в качестве бэкэнда и приложение ReactJs в качестве внешнего интерфейса, который мне нужен, чтобы общаться друг с другом с помощью SSE. В localhost, используя «artisan serve» в качестве веб-сервера, все работает как шарм, проблема возникает, когда я использую Nginx.
Это мой внутренний код:
public function pushExportedDocuments(Request $request)
{
$isFirst = true;
$response = new StreamedResponse(function () use ($isFirst) {
$usedIds = [];
while (true) {
if ($isFirst) {
\Log::debug("I'm alive, folks!");
echo 'data: ' . json_encode(["isAlive" => true]) . "\n\n";
ob_flush();
flush();
$isFirst = false;
} else {
$data = $this->getData();
echo 'data: ' . json_encode($temp) . "\n\n";
ob_flush();
flush();
\Log::debug("Sse sent, message id: " . $data->id);
array_push($usedIds, $data->id);
}
sleep(3);
}
});
$response->headers->set('Content-Type', 'text/event-stream');
$response->headers->set('X-Accel-Buffering', 'no');
$response->headers->set('Cache-Control', 'no-cache');
return $response;
}
А это Nginxконфиг для моего бэкэнд-сайта:
location ~ /documents_sse {
proxy_buffering off;
proxy_cache off;
proxy_set_header Connection '';
chunked_transfer_encoding off;
proxy_http_version 1.1;
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
proxy_read_timeout 3600;
proxy_buffer_size 0;
proxy_set_header Host $host;
gzip off;
access_log /var/log/nginx/app_sse-access.log;
try_files $uri $uri/ /index.php?$query_string;
}
В файле laravel.log оба "Я жив, ребята!"и "Sse sent, message id: {id}" написаны правильно, так же как и для сообщений в app_sse-access.log, но для клиента ничего не происходит.
Я не могу обработать, чтобы позволитьсообщения выходят из Nginx, некоторые подсказки?