我有 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.com
nginx 也会向您显示 jira。
因此,基本上,为了使 jira 和 confluence 与https
一台服务器上的域一起工作,您需要创建两个不同的配置 - 一个用于jira.domain.com
,另一个confluence.domain.com
用于proxy_pass
不同的端口。
答案2
nginx 文档没有说明它支持在listen
指令中使用域名。您应该只在那里使用端口号,除非您有特定需求,将 nginx 仅绑定到特定接口。