iframe嵌入第三网站,如何通过nginx反向代理解决跨域

最近遇到iframe嵌入页面跨域的问题,因为无法对嵌入的页面进行操作,只能通过nginx反向代理进行跨域,一直没成功,希望大家帮帮忙。

img


下面是nginx配置内容

img

如果你只是端口不同,nginx中的 proxy_pass 只需要换成web网站的端口如:https://192.168.3.66:web端口,你里面监听10800端口,然后代理到10800端口等于没代理

  • 这篇博客: iframe跨域安全中的 在nginx中配置 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • add_header X-Frame-Options DENY;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Frame-Options "ALLOW-FROM http://www.a.com,http:///www.b.com";
    
  • 以下回答由chatgpt基于相关博客总结生成:

    要通过nginx反向代理解决跨域问题,可以在nginx的配置中添加相关的header信息。根据参考资料的内容,下面是可以尝试的解决方案:

    1. 首先,将nginx配置文件中的location段落修改如下:
    location /ldy/ {
        proxy_pass http://localhost:3444/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        client_max_body_size    1000m;
    
        proxy_hide_header X-Frame-Options;
        add_header X-Frame-Options "ALLOW-FROM localhost:9530 172.26.238.74:8081 www.baidu.com";
        add_header Content-Security-Policy "frame-ancestors https://localhost:9530 http://172.26.238.74:8081 https:/www.baidu.com/" always;
    }
    

    这样配置后,nginx会将请求转发到http://localhost:3444/,并在响应头中添加X-Frame-Options和Content-Security-Policy的相关信息。

    1. 第一种方式:将X-Frame-Options设置为DENY,即不允许被iframe嵌套。
    add_header X-Frame-Options DENY;
    
    1. 第二种方式:将X-Frame-Options设置为SAMEORIGIN,即允许同域名下的iframe嵌套。
    add_header X-Frame-Options SAMEORIGIN;
    
    1. 第三种方式:将X-Frame-Options设置为ALLOW-FROM,指定允许嵌套的来源域名。
    add_header X-Frame-Options "ALLOW-FROM http://www.a.com, http://www.b.com";
    
    1. 另外,还可以使用Content-Security-Policy中的frame-ancestors来控制允许iframe嵌套的父级域名,可以设置为指定域名或者none。
    add_header Content-Security-Policy "frame-ancestors 'none'";
    

    或者指定允许的域名列表:

    add_header Content-Security-Policy "frame-ancestors http://www.a.com http://www.b.com";
    

    根据具体情况,选择合适数值设置即可。

    以上是通过nginx反向代理解决跨域问题的一些参考方法,你可以根据实际需求选择合适的方式进行配置。