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

nginx,双层,域名,iframe,嵌入,跳转,页面,处理过程 · 浏览次数 : 49

小编点评

**双层域名处理过程背景** Nginx双层域名时 iframe嵌入/跳转页面的处理过程主要经历以下步骤: 1. **第一层域名代理到域名侧代理**:Nginx将请求转发到域名侧代理的虚拟机域名上。 2. **域名侧代理根据请求路径找到对应的服务器**:例如,如果用户访问“example.com”,域名侧代理将找到对应服务器“backend_server”。 3. **第二层域名代理到后端服务器**:域名侧代理根据请求路径找到对应的服务器“Second_level_proxy_server_name”。 由于无法获取第二层反向代理的 upstream 的域名信息,域名侧代理必须创建一个虚拟域名,将其指向后端服务器的域名。当用户访问“example.com”时,域名侧代理将将请求转发到“Second_level_proxy_server_name”上。 **解决方法** 1. **使用 proxy_redirect 指令进行第二层代理**:通过设置`proxy_redirect http://Second_level_proxy_server_name http://Your.corporation.com ;`在`location`中,将请求代理到“Second_level_proxy_server_name”。 2. **在域名侧的负载均衡中增加配置**:由于域名侧代理无法获取 upstream 的域名信息,因此需要在域名侧的负载均衡配置中增加如下信息: ``` proxy_set_header Host $http_host ; ``` **坑点** 1. **配置复杂性**:配置双层代理可能比较复杂,需要考虑各种参数和配置选项。 2. **域名信息获取问题**:由于域名侧代理无法获取 upstream 的域名信息,因此需要在配置中进行一些简化。 3. **缓存问题**:设置过多的缓存时间或缓存配置可能导致请求缓存,影响性能。

正文

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 = / 就可以非常简单的设置一个 默认首页了
而不会影响具体的反向代理设置. 

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

与Nginx双层域名时 iframe嵌入/跳转页面的处理过程相似的内容:

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

# Nginx双层域名时 iframe嵌入/跳转页面的处理过程 ## 背景 ``` 两年前在上一家公司内遇到一个Nginx的问题 当时的场景是 双层nginx代理时(一层域名侧, 一层拆分微服务的网关层) 程序里面会打开一个嵌套的iframe, 便于进行缩放. 但是此时因为只能就近获取 第二层反向代

生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)

前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式 和 非抢占模式。这里我会一一展开说具体怎么配置 一、双节点均部署Nginx: 第一步:上传安装包到/usr/local/ 第二步:安装编译依赖(使用普通用户需要家sudo) yum i

[转帖]Nginx支持WebSocket反向代理

https://www.cnblogs.com/zhengchunyuan/p/12923692.html WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类

[转帖]nginx版本对比

https://www.cnblogs.com/lizexiong/p/15003543.html Nginx(发音同“engine x”)是一个高性能的反向代理和 Web 服务器软件,最初是由俄罗斯人 Igor Sysoev 开发的。Nginx 的第一个版本发布于 2004 年,其源代码基于双条款

[转帖]nginx版本对比

https://www.cnblogs.com/lizexiong/p/15003543.html Nginx(发音同“engine x”)是一个高性能的反向代理和 Web 服务器软件,最初是由俄罗斯人 Igor Sysoev 开发的。Nginx 的第一个版本发布于 2004 年,其源代码基于双条款

[转帖]Keepalived如何实现Nginx高可用

https://www.jb51.net/article/266305.htm Keepalived安装可参考Mysql+Keepalived实现双主热备 Master上的keepalived.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Nginx 高性能架构解析

本文详细探讨了Nginx的反向代理、负载均衡和性能优化技术,包括配置优化、系统优化、缓存机制和高并发处理策略,旨在帮助专业从业者深入理解并有效应用Nginx。 关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验

Nginx性能调优5招35式不可不知的策略实战

Nginx是一个高性能的HTTP和反向代理服务器,它在全球范围内被广泛使用,因其高性能、稳定性、丰富的功能以及低资源消耗而受到青睐。今天V哥从5个方面来介绍 Nginx 性能调优的具体策略,希望对兄弟们有帮助,废话不多说,马上开整。 1. 系统层面: 调整内核参数:例如,增加系统文件描述符的限制、T

Nginx负载配置

目录Nginx 负载均衡笔记1. 概述1.1 Nginx 简介1.2 负载均衡概述2. 四层负载均衡(传输层)2.1 工作原理2.2 特点2.3 优缺点优点缺点2.4 示例场景3. 七层负载均衡(应用层)3.1 工作原理3.2 特点3.3 优缺点优点缺点3.4 示例场景4. Nginx 调度算法4.

中间件-Nginx

一、nginx反向代理 输入 http://xxx.com/plat/login 跳转: http://localhost:8383/plat/login 将某个指定的域名代理到指定的服务 http://xxx.com 转 http://localhost:8383 1.修改hosts文件 C:\W