Nginx从同一IP地址上的另一个端口提供iframe服务

时间:2020-09-17 13:20:41

标签: nginx

我无法从托管Nginx服务器的IP地址中的另一个端口提供内容。

这是我的。 sites-available个文件

server {
  listen 443;
  ssl on;
  ssl_certificate /etc/ssl/certs/Cert.crt;
  ssl_certificate_key /etc/ssl/certs/Cert.pem;
  root /var/www/EX;
  index default.html;
  server_name 123.45.678.91;
  location / {
    try_files $uri $uri/ =404;
  }
}

我正在尝试显示类似这样的kibana实例的信息

<div> 
    <iframe src="http://123.45.678.91:5601/app/kibana#/dashboard/<INDEX>" height="100%" width="100%"></iframe>
</div>

但是我遇到了Mixed content错误。似乎不允许使用iframe,因为它来自http而非https请求。

关于如何解决此问题的任何想法?两种服务都托管在相同的IP上。

注意: 也尝试过

src="//123.45.678.91:5601/app/kibana#/dashboard/<INDEX>"
src="http://127.0.0.1:5601/app/kibana#/dashboard/<INDEX>"
src="/app/kibana#/dashboard/<INDEX>"

1 个答案:

答案 0 :(得分:0)

现代浏览器不允许在安全网站上使用不安全的iframe内容。 因此,有两种解决方案

  1. 您可以为iframe内容使用相同的IP和端口,并使用如下所示的url路径区分iframe内容。

将iframe网址更改为 https ://123.45.678.91: 443 / app / iframe / content / kibana#/ dashboard /指数 并只需在nginx配置中添加新位置,如下所示。

location ~ /iframe/content {
    ...serve iframe content...
}
  1. 但是如果您只想从其他端口提供iframe内容,则可以通过proxy_pass将请求发送到另一个端口,如下所示。

将iframe网址更改为 https ://123.45.678.91: 443 / app / iframe / content / kibana#/ dashboard /指数 并在nginx配置中添加新位置,它将代理传递给在同一nginx配置的不同服务器块中定义的不同端口号。

在安全端口服务器块中添加以下位置配置。

location ~ /iframe/content {
    proxy_pass http://123.45.678.91:5601/$request_uri
}

并在如下所示的相同配置文件中创建另一个服务器块。

server {
        listen 5601;
        server_name 123.45.678.91;

        location ~ /iframe/content {
            ...serve iframe content...
        }
}

因此,在这种情况下,浏览器将不会意识到正在从其他端口提供内容,因此不会抱怨。