首页 > 解决方案 > 上传 Nifi 模板响应 403 错误 + 浏览器记录无效的 CORS 请求

问题描述

我在反向 HAProxy 1.8 后面设置了一个带有简单 Nifi 1.9.2 服务的实验沙箱。除了上传模板的功能外,一切都按预期工作。我目前没有使用任何形式的身份验证或证书(它是一个沙盒)

在 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行中所示):

我已经确认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 绰绰有余。我最好的选择是有些东西我没有看到或者我完全忽略了。

标签: corsapache-nifihaproxy

解决方案


如果您查看您的请求,则表明您正在被推荐,http://experimental/nifi/而来源是http://127.0.0.1:8080.

如果您更改了您正确怀疑是问题的第一行,http://experimental那么帖子应该会成功通过。

或者,不太正确的 hacky 方法是添加一个带有 value 的 Access-Control-Allow-Origin 标头http://127.0.0.1:8080


推荐阅读