Я установил экспериментальную песочницу с простым сервисом Nifi 1.9.2 за обратной HAProxy 1.8. Все работает как положено, кроме функции загрузки шаблонов. В настоящее время я не использую никакой формы аутентификации или сертификатов (это песочница)
Прокси-сервер, настроенный в HAProxy, был прост:
backend service-nifi
# I think this first line is the issue
http-request set-header Origin http://127.0.0.1:8080
http-request add-header X-ProxyPort 80
http-request add-header X-ProxyScheme http
http-request add-header X-ProxyHost experimental
server nifi-server 127.0.0.1:8080 check
Соответствующая часть свойств Nifi выглядит следующим образом:
# web properties #
nifi.web.war.directory=./lib
nifi.web.http.host=127.0.0.1
nifi.web.http.port=8080
nifi.web.http.network.interface.default=
nifi.web.https.host=
nifi.web.https.port=
nifi.web.https.network.interface.default=
nifi.web.jetty.working.directory=./work/jetty
nifi.web.jetty.threads=200
nifi.web.max.header.size=16 KB
# whatever I put next breaks my current setup. I don't understand why yet
nifi.web.proxy.context.path=
nifi.web.proxy.host=
Везде, где я ищу решение для недействительного запроса, ответ всегда один и тот же: в текущей версии Nifi есть фильтрация CORS, и я должен установить заголовок Origin
на то, что Nifiожидает, что это будет. Я бы предположил, что это должно быть следующим (как показано в строке set-header
):
- схема:
http
- хост:
127.0.0.1
- порт:
8080
Я уже подтвердил с помощью tcpdump
, что запрос пересылается, как предполагалось: sudo tcpdump -s 1024 -l -A -i lo 'tcp port 8080' > dump
Вот мой запрос:
21:31:43 IP localhost.38642 > localhost.http-alt: Flags [P.], seq ..., ack ..., win ..., options [...], length ...: HTTP: POST /nifi-api/process-groups/{id}/templates/upload HTTP/1.1
...
POST /nifi-api/process-groups/{id}/templates/upload HTTP/1.1
Host: experimental
User-Agent: Mozilla... Firefox...
Accept: application/xml, text/xml, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Content-Type: multipart/form-data; boundary=---------------------------1434591419995738407236256922
Content-Length: 10378
Referer: http://experimental/nifi/
Origin: http://127.0.0.1:8080
X-ProxyPort: 80
X-ProxyScheme: http
X-ProxyHost: experimental
Это ответ:
21:31:43 IP localhost.http-alt > localhost.38642: Flags [P.], seq ..., ack ..., win ..., options [...], length ...: HTTP: HTTP/1.1 403 Forbidden
...
HTTP/1.1 403 Forbidden
Date: Mon, 21 Oct 2019 21:31:43 GMT
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
X-XSS-Protection: 1; mode=block
Content-Length: 20
Server: Jetty(9.4.11.v20180605)
Invalid CORS request
Я знаю из хранилища , что POST не входит в число принятых методов для конечной точки /process-groups/*/templates/upload
.
Я также попытался повысить уровень регистрации всего, настроив файл conf/logback.xml
, чтобы помочь устранить неполадки, но вывод подавляющим и в основном шум.
Я довольно разочарован этой проблемой. Я прочитал много тем об этой проблеме, и я попробовал почти все под солнцем. Многие примеры используют NginX или Apache. У меня нет такой гибкости, но я считаю, что HAProxy более чем достаточно. Лучше всего, что есть что-то, чего я не вижу, или что я полностью проигнорировал.