我是被 stack overflow 引导到这里的 - 如果这是错误的论坛,请见谅。我正在尝试设置一个模拟多个服务器的本地开发环境。我只是想了解更多相关信息,这是我第一次这样做。简而言之,我无法在我的 nginx 实例上访问子域。
所以基本上我有 3 个 Ubuntu VM 在运行。一个有 Nginx,一个有两个节点实例(web 和 api),一个是 mongodb。如果我进入 nginx 服务器,curl localhost
我会得到 web 响应(这很好)。如果我curl api.localhost
得到 api 响应(这也很好)。我认为这意味着 nginx 配置正确。
问题出在 Node 实例上。在 Node Ubuntu 服务器上,我更改了 hosts 文件以将 Nginx 的 IP(192.168.134.147)指向 test.com 和 api.test.com。所以现在当我curl test.com
在节点 ubuntu 服务器上时,我得到了 Web 响应(这很好)。但是,当我curl api.test.com
再次获得 Web 响应时。我想获得 api 响应。我不确定我在这里哪里出了错。对我来说,nginx 服务器在使用 api.localhost 访问自身时可以处理,但当另一台服务器访问它时却无法处理,这没有道理。
如果您需要我进一步解释任何事情,请告诉我。
另外,当我说我将 IP 指向 test.com 和 api.test.com 时,我只是将其添加到我的 hosts 文件中:
192.168.134.147 test.com api.test.com
谢谢!
编辑:
Nginx 服务器配置
这只是我随便想出来的,但可能准确。我没有做任何其他更改,我只是启用了这些网站并禁用了默认网站。
网络服务器:
server {
listen 80;
server_name localhost;
location / {
# First attempt to serve request as file, then
proxy_pass 192.168.134.145:3000;
# as directory, then fall back to proxy
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_pass 192.168.134.145:3000;;
}
}
API 服务器:
server {
listen 80;
server_name api.localhost;
location / {
# First attempt to serve request as file, then
proxy_pass 192.168.134.145:8080;
# as directory, then fall back to proxy
try_files $uri $uri/;
}
}
Hosts 文件
nginx 服务器的 hosts 文件刚刚添加了以下内容:
127.0.0.1 localhost api.localhost
答案1
您没有为和server
指定块。如果您打算为这些主机名提供服务,它们必须出现在块的指令中。否则,nginx 将从默认虚拟主机(由或 指定的虚拟主机)为它们提供服务。test.com
api.test.com
server_name
server
default_server
看nginx 如何处理请求在 nginx 文档中可以看到详细的解释。