首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在nginx反向代理后为两个web应用程序提供服务

问如何在nginx反向代理后为两个web应用程序提供服务
EN

Stack Overflow用户
提问于 2016-01-09 03:50:05
回答 3查看 1.8K关注 0票数 16

我有两个web应用程序(node.js express应用程序),web1和web2。这些web应用程序希望托管在通常类似http://www.web1.com和http://www.web2.com的网站上。我想在nginx反向代理后面托管它们,比如https://www.example.com/web1和https://www.example.com/web2。我不想在example.com上将这两个web应用程序暴露为两个子域。

以下是我的nginx配置的一个片段(没有SSL终止细节),我希望它能实现这一点:

代码语言:javascript
复制
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;
  }
}

这是可行的,除了web应用程序使用的相对链接。因此,web应用程序web1将有一个像/js/script.js这样的相对链接,它将不会被正确处理。

实现这一目标的最佳/标准方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2016-01-13 22:55:45

我认为应该是这样的: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; } location / { if ($http_referer ~* (/web1) ) { proxy_pass http://www.web1.com:80; } if ($http_referer ~* (/web2) ) { proxy_pass http://www.web2.com:80; } } }

票数 4
EN

Stack Overflow用户

发布于 2016-01-17 10:13:48

您应该能够通过检查$http_referer来完成此操作,如下所示:

代码语言:javascript
复制
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时将referer设置为http://example.com/web1/some/page,这样应用程序就不需要更改,除非它们需要在内部处理或关心referer。

在nginx文档中似乎很难找到$http_referer,但有几个站点提到了它:

票数 4
EN

Stack Overflow用户

发布于 2016-01-18 01:37:35

使用cookie和ngx_http_map_module怎么样?

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

在http下添加map

代码语言:javascript
复制
map $cookie_site $site {
  default http://www.web1.com:80;
  "web2" http://www.web2.com:80;
}

默认位置是这里

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

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

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

https://stackoverflow.com/questions/34684959

复制
相关文章

相似问题

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