Nginx / NChan PubSub - как изменить входящие сообщения - PullRequest
1 голос
/ 30 января 2020

Мои поиски простого сервера pubsub для удовлетворения относительно скромных потребностей в публикации / подписке для моего Android приложения побудили меня выбрать Nchan - расширение Nginx. NChan удивительно гибок и очень прост в настройке. По большей части я смог пройтись по документации и понять все, что требуется. Тем не менее, есть одна проблема, которая все еще ускользает от меня:

Одна из возможностей NChan - пересылать входящие сообщения для обработки в восходящем направлении, прежде чем разрешить их публикацию и предоставление другим клиентам. Раздел Пересылка сообщений документации гласит:

Код ответа в восходящем направлении определяет порядок продолжения публикации: 304 Not Modified публикует сообщение как полученное без изменения. 204 Нет содержимого отбрасывает сообщение 200 OK используется для изменения сообщения. Вместо исходного входящего сообщения сообщение, содержащееся в этом HTTP-ответе, публикуется .

Тестовый стек, который я должен увидеть, как это работает, выглядит следующим образом

Моя Nginx конфигурация

location ~ /pub/(\w+)$ 
{
 nchan_publisher;
 nchan_channel_id "$1"; #first capture of the location match
 nchan_publisher_upstream_request /beforepub;
}

location = /beforepub 
{
 proxy_pass https://another-example.com/beforepub/;
 proxy_set_header X-Publisher-Type $nchan_publisher_type;
 proxy_set_header X-Prev-Message-Id $nchan_prev_message_id;
 proxy_set_header X-Channel-Id $nchan_channel_id;
 proxy_set_header X-Original-URI $request_uri;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade";
} 

По сути, я беру входящее сообщение и пересылаю его на /beforepub/ на том же сервере, где с ним работает следующий скрипт index.php.

Есть одна из двух вещей, которые я хочу сделать с этим перенаправленным сообщением

"Записать некоторую информацию : в локальную базу данных, обычно связанную с заголовком X-Channel-ID и затем вернуть заголовок 204, чтобы ничего не публиковалось

<?php
 header("HTTP/1.1 204 OK");
 $channelID = getallheaders()['X-Channel-ID'];
 //inspect and record the channel ID
?>

Возвращать измененный ответ :

<?php
 header("HTTP/1.1 200 OK");
 $headers = getallheaders();
 $channelID = $headers['X-Channel-ID'];
 //return a response dependendent on the channelID
 echo "modified response";
?>

в надеюсь, что другие подписчики канала увидят измененный ответ .

. Чтобы проверить это поведение в первую очередь, я использую

NChan может принимать соединения pubsub, используя либо Протоколы wss или http(s). Я использую wss для подключения sub в Simple Websocket Client, SW C и https для подключения паба в клиенте Advanced REST AR C.

Имея это, я подписываюсь на сообщения в "альфа-канале" v ia SW C в

wss://example.com:443/sub/alpha

и

подключаются и публикуют sh сообщений на одном и том же "альфа-канале" из AR C и POST к URL https://example.com/pub/alpha с содержанием POST original content. Я обнаружил, что SW C возвращает пустой ответ в виде

[2020-01-30 18:04:14.204]

Мне не ясно, так ли это, потому что я как-то неправильно установили мои Nginx настройки прокси или просто полностью неправильно поняли, что переадресация NChan должна работать.

...