如何使用 NGINX 在同一域下从不同的 IP /服务器提供两个不同的 Nodejs 应用程序

如何使用 NGINX 在同一域下从不同的 IP /服务器提供两个不同的 Nodejs 应用程序

我之前已经配置过以下情况,其中我在同一台服务器下有两个不同的应用程序,但具有不同的子域。例如:

  • domain.com指向ip1:3000根目录下/var/www/html/site1
  • sub.domain.com指向ip1:3001下方/var/www/html/site2

出于 SEO 原因,我现在想做的是将所有应用程序放在同一域。但为了保持较低的资源使用率并分散一点负载,我希望应用程序处于不同的机器/服务器/ips。所以我想象的是这样的:

  • domain.com指向ip1:3000根目录下/var/www/html/site1
  • domain.com/site2指向ip2:3000/var/www/html/site2

我如何使用 NGINX 实现这一点?我需要什么?有可能吗?

我对此进行了一段时间的调查,发现大多是第一种情况,但这并不相关。

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

编辑:澄清一下,这不起作用吗?

server {
  server_name domain.com;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://localhost:3000;
  }

  location /app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://some.other.external.ip:3000;
  }
}

答案1

域名始终指向特定服务器,您可以在 DNS 记录(如 A、AAAA 和 CNAME 记录)中确定。您可以拥有多个服务器来服务同一个域名,但它们都应以相同的方式运行。

你需要的是反向代理。这意味着您有服务器将客户端的请求转发到应用服务器。这样您就可以添加任意数量的应用服务器。您可以在本 NGINX 指南

您编辑的代码看起来与反向代理完全一样,加油!

答案2

通过在 NGINX 配置中实现以下内容来实现这一点:

location /app/ {
    rewrite ^/app(/.*)$ $1 break;
    proxy_pass http://some.other.external.ip;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_redirect off;
  }

这是在此指导下完成的关联并按照@jouhisorsa 的建议参考文档。

我在不知道代理的情况下问了这个问题,但现在我对代理有了更多的了解,我确信我应该对这个问题和谷歌使用的正确术语是“proxy_pass nginx 到另一台服务器“,它会给你相当多的结果,例如:

  1. Nginx:如何将一个子目录通过 proxy_pass 传递到另一个子目录
  2. 如何将 nginx proxy_pass 配置到另一个代理服务器?
  3. nginx proxy_pass 到另一个服务器/路径/
  4. ETC。

我相信它们非常相关,并能给你一些见解(尽管其中一些还没有答案)。无论如何,那里的知识很棒。谢谢你的帮助。

相关内容