Nginx 提供错误的域名站点。如果未应用任何配置,则不会显示默认站点

Nginx 提供错误的域名站点。如果未应用任何配置,则不会显示默认站点

我有 3 个域指向我的服务器,并且该服务器运行来自 atlissan 的 confluence 和 jira 应用程序。

无论出于什么原因,我的 nginx 表现得很奇怪。

我没有改变默认的 nginx 配置。如果我访问test.domain.com,nginx 会显示默认的 nginx 页面。

我有一个在站点启用中启用的 jira 配置:

server {
   listen jira.domain.com:443 ssl;
   server_name jira.domain.com;
   server_tokens off;
   location / {
       proxy_set_header Host $server_name;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forewarded-For  $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header Authorization "";
       proxy_pass       http://127.0.0.1:8080; #Jira port
   }

   # certbot ssl settings
   #htaccess settings
}

server {
    if ($host = jira.domain.com) {
        return 301 https://$host$request_uri;
    }
    listen jira.domain.com:80;
    server_name jira.domain.com;
    return 404;
}

现在,如果我访问jira.domain.com,我就会得到 jira 服务。

这些是我的仅有的两种配置。关键是,即使我从 访问,我也会获得 Jira 服务confluence.domain.com。如果我将代理传递中的端口更改为 confluence 端口,我就会获得 confluence 服务。如果我来自 confluence.domain.com,为什么 Nginx 会接收?甚至 Jira 也告诉我我来自 confluence.domain.com。

所有域名条目都是服务器 IP 的 A 记录。

答案1

看看这里的默认配置,您有一行listen 80 default_server; default_server表示此配置将用于您未在 nginx 中配置的每个域。test.domain.com您可能是通过访问的http,而 nginx 使用默认配置将您路由到 nginx 起始页。

同时,您通过访问了 confluence https,现在您在 nginx 中只有一个配置可以在443端口上响应 - 那就是您对 jira 的配置(在 nginx 默认配置https部分被注释掉)所以它通过 jira 配置将您路由到proxy_pass http://127.0.0.1:8080;即使您现在去https://test.domain.comnginx 也会向您显示 jira。

因此,基本上,为了使 jira 和 confluence 与https一台服务器上的域一起工作,您需要创建两个不同的配置 - 一个用于jira.domain.com,另一个confluence.domain.com用于proxy_pass不同的端口。

答案2

nginx 文档没有说明它支持在listen指令中使用域名。您应该只在那里使用端口号,除非您有特定需求,将 nginx 仅绑定到特定接口。

相关内容