首页 > 系统相关 >Nginx双层域名时 iframe嵌入/跳转页面的处理过程

Nginx双层域名时 iframe嵌入/跳转页面的处理过程

时间:2023-07-15 23:22:06浏览次数:35  
标签:set http header server Nginx 域名 proxy iframe 跳转

Nginx双层域名时 iframe嵌入/跳转页面的处理过程


背景

两年前在上一家公司内遇到一个Nginx的问题
当时的场景是 双层nginx代理时(一层域名侧, 一层拆分微服务的网关层)
程序里面会打开一个嵌套的iframe, 便于进行缩放. 

但是此时因为只能就近获取 第二层反向代理的 upstream的域名信息. 
导致打开的是一个 虚拟的upstream的域名. 
外部用户打开时就是提示 http(s)://upstream_server/some/url can not open /404 等问题. 
当时耗费了一个中午才在多位同事的协助下解决问题. 
方式方法是 proxy_redirect的方式进行 第二层代理传给域名侧代理的(upstream_server)虚拟机域名修改为 域名侧代理的实际地址信息(外网域名).

问题描述比较绕, 但是解决方法还是比较简单的. 

解决方法-之一

在 域名侧的负载均衡出增加如下信息:
注意 我这个里面包含了较多的内容, 为了安全以及其他. 

    location / {

    proxy_set_header  Host $http_host ;
    proxy_http_version 1.1;
    proxy_read_timeout 3600s;
    # websocket协议升级 可选
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


    proxy_pass http://192.168.xx.xx/;

    proxy_redirect http://Second_level_proxy_server_name  http://Your.corporation.com ;
   }


解决方法之二

需要说明, 这个地方有个坑,坑了我三个小时.

当年发现问题是, 因为项目上的nginx配置文件是自己从头到尾跟上家公司最辛苦最靠谱的栋哥一起写的.
为了显得专业(我一直认为, 钱不给够就不是真专业)
自己每一层都写了很多冗余的配置节(这锅不是栋哥的也不是挖到雷的东哥的, 是我的)

而这次的配置文件都非常简洁明了
我其实挺喜欢这种格式的. 但是没想到因为 缺少了一些必要的参数条件,导致一直无法调通. 
所以解决方法之二就是, 必须要在靠近应用的那一侧的负载均衡处 增加如下配置. 
不然可能跟我一样浪费一晚上刷历史公众号的时间. 

注意不增加很多proxy_set_header的设置, 可能总是无法正确跳转, 无比切记. 


解决方法之二

upstream Second_level_proxy_server_name {
    server 192.168.xx.yy:1234;
}

location /your_api_path/ {
    proxy_set_header  Host $http_host ;
    proxy_http_version 1.1;
    proxy_read_timeout 3600s;
    # websocket 协议升级, 可选
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http:///Second_level_proxy_server_name/your_api_path/;
    expires -1;
}

总结-chatgpt的解释

proxy_pass和proxy_redirect是Nginx中用于代理服务器的两个指令。

proxy_pass指令用于将请求转发到后端服务器。它指定了代理服务器将请求转发到的后端服务器的地址。例如:

location / {
    proxy_pass http://backend_server;
}
在上面的示例中,所有以"/"开头的请求将被转发到backend_server指定的后端服务器。

proxy_redirect指令用于修改从后端服务器返回的响应头中的Location标头。它允许你替换响应中的网址,以便将客户端重定向到正确的地址。例如:

proxy_redirect http://backend_server/ http://frontend_server/;
在上面的示例中,如果后端服务器返回一个重定向的响应,其中包含"http://backend_server/“,则Nginx会将其重定向到"http://frontend_server/”。

这些指令通常一起使用,以便在Nginx代理服务器上配置反向代理。proxy_pass指令用于转发请求,proxy_redirect指令用于修改返回的响应,以便正确地重定向客户端。

总结-个人版

pass 其实是指向的下一层.
redirect 其实是上一层帮下一层处理下一层不知道的事情. 

理论上 下层反向代理 是可能不知道上层方向代理的域名的
因为域名可以不是一个, 并且可能经常会变. 
写死了域名时不合适的. 在遇到各种变化时太过笨重. 

所以pass 实现基本的 反向代理的需求
redirect 实现有域名变化时的需求. 

nginx 其实非常复杂. 不管是性能还是配置调优可以直接说的地方非常多.

今天这三个小时 其实看了不少文档, 顺便发现自己之前真是笨(现在也是)
使用 location = / 就可以非常简单的设置一个 默认首页了
而不会影响具体的反向代理设置. 

自己的思维还是受限, 需要继续开拓, 继续学习. 

标签:set,http,header,server,Nginx,域名,proxy,iframe,跳转
From: https://www.cnblogs.com/jinanxiaolaohu/p/17557218.html

相关文章

  • nginx部署静态网页
    一、下载运行进入nginx官网下载页面:nginx下载地址,下载稳定版本 运行方式一:nginx下载目录双击允许nginx.exe运行方式二:nginx命令行启动,在下载目录地址栏输入cmd,输入startnginx任务管理器出现nginx.exe表示启动成功二、常用命令nginx-ssignal当信号可以是下列之一:......
  • docker安装nginx
    1.docker下Nginx安装:(web站点配置)  dockerpullnginx--拉取nginx镜像  dockerrun--namenginx-test1-p8081:80-dnginx  dockerps  mkdir-p./nginx/www./nginx/logs./nginx/conf--/root下创建这几个路径  dockercp13afb35cbc98:/e......
  • Angular 应用里产品列表行项目点击后跳转到产品明细页面的实现
    需求如标题所示,下面是详细步骤介绍。首先,你需要确保你的环境中已经安装了AngularCLI。如果没有,可以通过以下命令安装:npminstall-g@angular/cli然后你可以创建一个新的Angular项目:ngnewproduct-appcdproduct-app创建一个名为product的组件来显示产品列表:nggenerat......
  • 解决浏览器自动将http跳转至https导致无法访问的问题
      最近在宝塔面板申请免费的SSL证书后,部署证书的80端口下的网站可以通过https正常访问,但其他未部署证书的端口也被强制跳转至https请求,导致浏览器提示不安全从而无法访问。宝塔的8888端口也不能访问,当时那是一个慌,当我尝试了各种方法,如重新放行443端口、重新配置nginx反向代理、......
  • nginx重点
    1.常见web报错代码  404  文件或资源找不到  403  禁止访问,没有首页文件或权限不够  500  内部错误,程序自身配置文件或代码问题,或数据库连接不上  502  网关或集群错误2.Nginx.conf文件结构(6条)  全局块:全局指令,有nginx运行用户组、PID存放路径......
  • windows下的nginx目录介绍
    windows下的nginx目录介绍目录结构windows下的nginx目录结构如图所示:日志文件logs目录下存储的是日志文件。access.log文件内容类似如下:127.0.0.1--[18/May/2023:16:44:04+0800]"POST/javaservice/client/service/client/connectHTTP/1.1"404431"-""Post......
  • Vue路由跳转时携带参数
    在方法中使用this.$router.push方法进路由跳转时,需要携带参数,可以使用上下文参数,这样携带的话参数会一直存在,具体携带方式如下 在跳转路径下,添加state对象属性,属性名是固定的,对象中填入自己需要传递的参数,ps:对象需要转化为字符串,不然传递不过去,JSON。stringify方法进行字符串......
  • vue进行页面跳转样式丢失问题
    问题:vue使用 this.$router.push方法进行页面跳转时样式丢失,如下图,图一为正常页面,图二为跳转后的界面  解决方法:并非样式丢失,而是样式背覆盖了,去跳转的原界面样式中加入scope,跳转之后问题解决 ......
  • 性能优化 - Nginx & Linux
    性能优化-Nginx&Linux来自鑫哥[鑫哥的技术思维]2022-05-0709:26发表于湖北纲要Nginx优化后的完整配置Linux内核参数优化修改最大打开文件句柄数Nginx优化后的完整配置#核心参数(其他参数大部分情况下用不到)#userUSERNAME[GROUP]#解释:指定运行nginx的wo......
  • nginx安装
    将nginx源码包下载下来,官网下载地址:http://nginx.org/en/download.html,选择stableverson版本,以nginx-1.18.0为例,材料包中已下载,进入存放nginx-1.18.0.tar.gz源码包的目录,用解压命令解压到当前目录tar-xzvfnginx-1.18.0.tar.gz进入解压后的nginx-1.18.0目录里,使用cofigure......