用于子域的路由也应用于根域

时间:2018-04-10 02:21:39

标签: nginx

考虑在同一台服务器上托管的两个网站:domain.comfoo.domain.com。我想在端口5555上为每个站点启动监视面板。每个站点都有一个单独的监视面板,因此我需要使用nginx将domain.com:5555foo.domain.com:5555路由到两个不同的位置。

以下是foo.domain.com的配置:

server {
  listen 5555;
  server_name foo.domain.com;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://localhost:5678;
  }
}

虽然这适用于foo.domain.com:5555,但它也会将domain.com:5555路由到监控面板。这就像我定义server_name domain.com foo.domain.com一样,但显然我只为foo.domain.com定义了它。

服务器上唯一的其他nginx配置是针对端口80和443.这些配置都不使用任何通配符并明确使用全名。

1 个答案:

答案 0 :(得分:1)

nginx 始终有一个默认服务器 - 如果您没有定义默认服务器,它将使用第一个具有匹配listen指令的服务器块。

如果您想阻止此行为,则需要为端口5555定义一个包罗万象的服务器。

例如:

server {
    listen 5555 default_server;
    return 444;
}

有关详情,请参阅this document