首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx代理动态域名断开链接

Nginx代理动态域名断开链接
EN

Stack Overflow用户
提问于 2015-04-30 06:20:45
回答 2查看 456关注 0票数 0

在内部网络中,我们有大量的服务器/设备,我们希望能够从web应用反向代理到这些服务器/设备。如果我在位置上下文中对目标IP进行硬编码,则一切正常。例如:

代码语言:javascript
复制
location / {
    proxy_pass  https://172.10.10.1/;
}

但是当我使用一个变量作为主机时,例如:

代码语言:javascript
复制
location / {
    proxy_pass  https://$arg_target/;
}

如果$arg_target是来自http://proxy.com?target=172.10.10.1之类的URL的172.10.10.1,则返回的页面将丢失CSS和Javascript资源,这是我们正在寻找的功能的基础。

任何帮助都将不胜感激。提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-04-30 23:18:55

将一个域用于许多不同的应用程序是一种棘手的方法,这可能会导致许多不同的问题。例如,如果两个或多个服务器设置了同名的cookie,它们将发生冲突,因为cookie是为域设置的,并且所有应用程序之间共享相同的域名。如果您的应用程序使用某种依赖于cookie的会话机制,这将特别不方便。

更好的解决方案是为每个应用程序使用不同的子域,这可以通过基于"map“指令和通配符服务器名称的简单Nginx配置来实现。

话虽如此,让我们回到静态文件的原始问题。在这种情况下,一个可接受的解决方案是使用cookies实现您自己的会话。其思想是在第一次请求期间使用目标主机值设置cookie。然后,如果其他请求(比如对css文件的请求)没有target参数,您可以使用该cookie的值来确定将请求代理到的服务器。

粗略地说,这种类型的配置可以表示如下:

代码语言:javascript
复制
server {
    ...

    set $target "$arg_target";

    if ($target = "") {
        set $target "$cookie_target";
    }

    add_header Set-Cookie "target=$target; path=/; domain=$host; max-age=3600";

    location / {
        proxy_pass  https://$target;
    }

    ...
}
票数 1
EN

Stack Overflow用户

发布于 2015-05-02 04:32:48

我们以一种不同的方式解决了这个问题,这要归功于我的一位同事,他比我更了解Nginx和网络我们选择了server_name路线,而不是location路线。

这意味着我们不是从$uri值中提取IP,而是使用子域。下面是一个服务器配置的示例,它允许我们实现这一点:

代码语言:javascript
复制
server {
    server_name ~^(?<ip>.+)\.devices\.com$;

    location / { 
        proxy_pass https://$ip;
    }
}

有了上面的配置,我们现在可以在浏览器的地址框中使用类似于http://172.10.10.1.devices.com/terminal/的东西,一切都可以正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29955599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档