【问题标题】:How to serve two web applications behind an nginx reverse proxy如何在 nginx 反向代理后面为两个 Web 应用程序提供服务
【发布时间】:2016-04-13 14:28:19
【问题描述】:

我有两个 Web 应用程序(node.js express 应用程序),web1web2。这些 Web 应用程序希望托管在通常类似于 http://www.web1.comhttp://www.web2.com 的网站上。我想以https://www.example.com/web1https://www.example.com/web2 将它们托管在nginx 反向代理后面。我不想在example.com 上将这两个 Web 应用程序公开为两个子域。

这是我的 nginx 配置的 sn-p(没有 SSL 终止详细信息),我希望它可以完成此操作:

server {
  listen 443;
  server_name .example.com;

  location /web1 {
    proxy_pass http://www.web1.com:80;
  }

  location /web2 {
    proxy_pass http://www.web2.com:80;
  }
}

除了网络应用程序使用的相对链接外,这有效。所以网络应用 web1 将有一个像 /js/script.js 这样的相对链接,它不会被正确处理。

完成此任务的最佳/标准方法是什么?

【问题讨论】:

  • 我不知道 ngix,但在 web 请求中有一个 http referrer,它是当前请求“之前”的页面。你能在 ngix 中映射引用者吗?
  • 我看到一些地方认为这是一个潜在的解决方案,但我不确定如何实施。

标签: express nginx proxy


【解决方案1】:

我认为是这样的: server { listen 443; server_name .example.com; location /web1 { proxy_pass @987654321@; } location /web2 { proxy_pass @987654322@; } location / { if ($http_referer ~* (/web1) ) { proxy_pass @987654323@; } if ($http_referer ~* (/web2) ) { proxy_pass @987654324@; } } }

【讨论】:

【解决方案2】:

您应该可以通过检查$http_referer 来做到这一点,例如:

location / {
  if ($http_referer ~ ^http://(www.)?example.com/web1) {
    proxy_pass http://www.web1.com:80;
  }

  if ($http_referer ~ ^http://(www.)?example.com/web2) {
    proxy_pass http://www.web2.com:80;
  }
}

浏览器在请求 /js/script.js 时会将引用者设置为 http://example.com/web1/some/page,因此应用不需要更改,除非它们需要在内部处理或关心引用者。

$http_referer 在 nginx 文档中似乎不太容易找到,但在一些网站中提到:

【讨论】:

    【解决方案3】:

    使用cookie和ngx_http_map_module怎么样?

    add_header Set-Cookie "site=web1;Path=/;Domain=.example.com;"; 添加到location /web1 {...}(也是web2)。

    http下添加map

    map $cookie_site $site {
      default http://www.web1.com:80;
      "web2" http://www.web2.com:80;
    }
    

    默认位置是这里

    location / {
        proxy_pass $site;
    }
    

    您可以将cookie的值直接传递给proxy_pass。但是,使用地图是更安全的方式。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2021-08-25
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2020-08-18
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多