上传 Nifi 模板响应 403 错误 + 浏览器记录无效的 CORS 请求
Uploading Nifi template responds with 403 error + browser logs invalid CORS request
我在反向 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
header 设置为什么尼菲希望如此。我猜应该是这样的(如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
我从 repository 得知 POST 不在端点 /process-groups/*/templates/upload
的可接受方法中。
我也曾尝试通过调整 conf/logback.xml
文件来提高所有内容的日志记录级别,以帮助解决问题,但输出是压倒性的,主要是噪音。
我对这个问题很沮丧。我已经阅读了很多关于这个问题的话题,并且我已经尝试了几乎所有在 Sun 下的事情。许多示例使用 NginX 或 Apache。我没有那种灵活性,但我认为 HAProxy 已经足够了。我最好的选择是有些东西我没有看到或者我完全忽略了。
如果您查看您的请求,则表明您被 http://experimental/nifi/
推荐,而来源是 http://127.0.0.1:8080
。
如果您将您正确怀疑是问题的第一行更改为 http://experimental
,那么 post 应该会成功通过。
或者,not-so-correct hacky 方法是添加值为 http://127.0.0.1:8080
.
的 Access-Control-Allow-Origin header
我在反向 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
header 设置为什么尼菲希望如此。我猜应该是这样的(如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
我从 repository 得知 POST 不在端点 /process-groups/*/templates/upload
的可接受方法中。
我也曾尝试通过调整 conf/logback.xml
文件来提高所有内容的日志记录级别,以帮助解决问题,但输出是压倒性的,主要是噪音。
我对这个问题很沮丧。我已经阅读了很多关于这个问题的话题,并且我已经尝试了几乎所有在 Sun 下的事情。许多示例使用 NginX 或 Apache。我没有那种灵活性,但我认为 HAProxy 已经足够了。我最好的选择是有些东西我没有看到或者我完全忽略了。
如果您查看您的请求,则表明您被 http://experimental/nifi/
推荐,而来源是 http://127.0.0.1:8080
。
如果您将您正确怀疑是问题的第一行更改为 http://experimental
,那么 post 应该会成功通过。
或者,not-so-correct hacky 方法是添加值为 http://127.0.0.1:8080
.