我之前已经配置过以下情况,其中我在同一台服务器下有两个不同的应用程序,但具有不同的子域。例如:
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 到另一台服务器“,它会给你相当多的结果,例如:
- Nginx:如何将一个子目录通过 proxy_pass 传递到另一个子目录
- 如何将 nginx proxy_pass 配置到另一个代理服务器?
- nginx proxy_pass 到另一个服务器/路径/
- ETC。
我相信它们非常相关,并能给你一些见解(尽管其中一些还没有答案)。无论如何,那里的知识很棒。谢谢你的帮助。