【问题标题】:Error 404 in Nginx reverse proxy with iframe带有 iframe 的 Nginx 反向代理中的错误 404
【发布时间】:2021-03-09 09:23:45
【问题描述】:

我一直在尝试运行反向代理来管理 iframe 中的 Grafana 图。我在 80 端口上使用 Apache 和 html 页面,在端口 3000 上使用 Grafana 服务器,在 8081 上使用 Nginx 和反向代理。

问题是当我尝试访问 iframe 的内容时,代理给了我 404 错误。为了测试一切,我尝试了本地 Grafana 服务器配置和具有 2 个不同 iframe 的远程服务器配置。连接到本地 Grafana 的那个在上传文件时给了我 Grafana 的一般错误和 404,远程的只有 404。

显然,如果我将每个链接插入到浏览器中,每个链接都可以单独工作,并且不使用代理,它在 iframe 上的工作方式相同。

我不是 Nginx 专家,配置中可能会出现一些错误。作为配置文件,我使用的是 Nginx default.conf 文件,所以我没有接触过 nginx.conf,因为我认为我不需要它。

index.html

<h4>grafana local</h4>
        <iframe src="http://localhost:8081/grafana/d-solo/KXusIR0Mk/test?orgId=1&from=1606211757397&to=1606233357397&panelId=2" width="450" height="200" frameborder="0"></iframe>
<h4>grafana remote</h4>
        <iframe src="http://localhost:8081/salvo/d-solo/s-kg75yZz/stazione-meteo?orgId=1&panelId=8&from=1606215708391&to=1606237308391" width="450" height="200" frameborder="0"></iframe>

default.conf

server {
    listen 8081;
    listen [::]:8081;
    server_name 127.0.0.1;

    location /grafana/ {
       #rewrite (grafana\/).* d-solo/KXusIR0Mk/test?orgId=1&from=1606211757397&to=1606233357397&panelId=2 break;
       proxy_pass http://localhost:3000/;
    } 
    
    location /salvo/ {
        #rewrite (salvo\/).* d-solo/s-kg75yZz/stazione-meteo?orgId=1&panelId=8&from=1606215708391&to=1606237308391 break;   
        proxy_pass http://<ip_remoteGrafana>:<port>/;
    }

}

PS:远程 Grafana 的 ip 和端口不是我的,所以我删除了它们,但在代码中它们在那里 ;)

access.log

::1 - - [26/Nov/2020:14:17:41 +0100] "GET /salvo/d-solo/s-kg75yZz/stazione-meteo?orgId=1&panelId=8&from=1606215708391&to=1606237308391 HTTP/1.1" 302 29 "http://localhost/grafana/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"
::1 - - [26/Nov/2020:14:17:41 +0100] "GET /login HTTP/1.1" 404 197 "http://localhost/grafana/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"

错误日志

2020/11/26 14:17:41 [error] 101110#101110: *1 open() "/usr/share/nginx/html/login" failed (2: No such file or directory), client: ::1, server: 127.0.0.1, request: "GET /login HTTP/1.1", host: "localhost:8081", referrer: "http://localhost/grafana/"

这是什么原因造成的?

【问题讨论】:

    标签: html nginx iframe reverse-proxy grafana


    【解决方案1】:

    显然代理的 Grafana 需要身份验证(重定向到 /login),这与您的上下文路径不兼容(在您的情况下它必须是 /salvo/login)。您将需要重定向/内容重写,它填充更新您使用的上下文/salvo/ 的所有路径。这很复杂,而且不太可靠。

    但是您可能会以某种方式这样做,但随后您可能会发现目标 Grafana 不允许嵌入到 iframe 中,或者 Grafana cookie 配置(例如,相同站点、安全)也可能对您的 http 应用程序或 Grafana 身份验证有问题是个问题。我会先使用简单/上下文来及早发现问题,然后再使用更复杂的上下文路径,例如/salvo/.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 2014-05-18
      • 2021-06-15
      • 2018-12-12
      • 2018-02-09
      相关资源
      最近更新 更多