Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Express 如何在nginx反向代理背后为两个web应用程序提供服务_Express_Nginx_Proxy - Fatal编程技术网

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

Express 如何在nginx反向代理背后为两个web应用程序提供服务,express,nginx,proxy,Express,Nginx,Proxy,我有两个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终止细节),我希望它能实现这一点: s

我有两个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终止细节),我希望它能实现这一点:

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
的相对链接,无法正确处理


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

我认为:

服务器{
听443;
server_name.example.com;
地点/网站1{
代用通行证;
}
位置/网络2{
代用通行证;
}
地点/{
如果($http_referer~*(/web1)){
代用通行证;
}
如果($http_referer~*(/web2)){
代用通行证;
}
}
}

您应该可以通过检查
$http\u 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;
  }
}
浏览器将把referer设置为
http://example.com/web1/some/page
当它请求
/js/script.js
时,应用不需要更改,除非它们需要在内部处理或关心引用者

$http_referer似乎不容易在nginx文档中找到,但有几个网站提到了它:


使用cookie和ngx\u http\u map\u模块如何

添加
Add_头集Cookie“site=web1;Path=/;Domain=.example.com;”
位置/web1{…}
(也是web2)

map
添加到
http

map $cookie_site $site {
  default http://www.web1.com:80;
  "web2" http://www.web2.com:80;
}
默认位置是这个

location / {
    proxy_pass $site;
}

您可以将cookie的值直接传递给
proxy\u pass
。但是,使用map更安全。

我不知道ngix,但是在web请求中,有一个http referer,它是当前请求“前面”的页面。你能在ngix中找到推荐人吗?我看到一些地方认为这是一个潜在的解决方案,但我不确定这是如何实现的。看这个:这看起来很好。您是否有可能知道在express中referer头应该设置为什么?如果应该避免,