如何在不同的端口上运行多个 Nginx 实例

如何在不同的端口上运行多个 Nginx 实例

我想在我的服务器上使用不同的端口运行多个 Nginx 实例(例如,一个用户在端口 2345 上运行 Nginx,另一个用户在端口 2346 上运行)。到目前为止,我已经成功在指定端口上编译和运行服务器。但是,我遇到了一个奇怪的问题:如果我访问 domain1.com:2345 或 domain2.com:2346,我会得到正确的 (200) 响应,但如果我访问 domain1.com 或 domain2.com(未指定端口),我根本得不到任何响应。

如能提供任何有关如何进行设置的帮助/线索,我们将不胜感激。

答案1

好的,我找到了解决方案。

我所做的是在端口 80 上以 root 身份运行“主”服务器。从那里,我使用 proxy_pass 指令在每个服务器的端口上添加服务器块。

  server {
    listen      80;
    charset     utf-8;
    server_name domain1.com;
    location / {
        proxy_pass http://domain1.com:2345;
  }
  server {
    listen      80;
    charset     utf-8;
    server_name domain2.com;
    location / {
        proxy_pass http://domain2.com:2346;
  }

也许有更优雅的解决方案,但这似乎效果很好。

答案2

如果您不指定端口,Web浏览器会自动选择端口 80。根据您的解释,似乎两个实例都没有监听端口 80。

你可能想要做的是从同一个 nginx 实例中同时提供 domain1.com 和 domain2.com 服务,使用虚拟主机

答案3

如果您的服务器可以拥有多个 IP 地址,则可以在端口 80 上运行多个 nginx 实例,前提是您在指令中指定不同的 IP 地址listen

一个例子:

首先:

server {
  listen a.b.c.e:80
  ...
}

另一方面

server {
  listen f.g.h.i:80
  ...
}

然而,如果你有多个用户,这将会很麻烦。而且多个公共 IP 地址可能很难获得。

相关内容