如何使用子域服务器名配置代理
How to configure a proxy with a subdomain servername
我在 nginx 中有以下 vhost 配置:
upstream mybackendsrv {
server backend:5432;
}
server {
listen 80;
server_name sub.domain.org;
location / {
proxy_pass http://mybackendsrv;
}
}
当我使用像 sub.domain.org
这样的 server_name 时,我得到了默认的 nginx 回退并且我的服务器不匹配。
当我使用像 customroute
这样的 server_name 时,我得到了正确的行为并且我的服务器匹配。
我用谷歌搜索了一下这个问题,我相信 nginx 支持子域匹配,所以我不确定哪里出了问题。我检查了 access.log 和 error.log,但没有得到相关日志。
知道如何诊断吗?
我应该可以在 nginx 的调试模式下显示路由匹配逻辑,但我不知道如何实现。
感谢任何帮助。
经过调查,问题似乎与我们的 URL 是一个子域这一事实无关。
为了调试这种情况,在 /etc/nginx/nginx.conf
中的 log_format 指令中引入了一个 $host
变量:
log_format main '$remote_addr - $host - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
这个$host
变量可以理解sub.domain.org
有问题:当我们访问sub.domain.org
时,主机被更改为NGINX服务器的主机名,与[=相反16=] 哪个主机没有改变。
看来 sub.domain.org
不是简单的 DNS 配置,而是 Apache 代理传递配置。 Apache 在传递请求时更改了主机名,导致 NGINX 与重写的主机不匹配,因为它在请求主机中接收到它自己的主机而不是目标主机。
要纠正此行为,我们必须在 Apache 中添加以下配置:ProxyPreserveHost on
。
一旦我们重新启动 Apache,它的主机就会被保留,我们的 server_name sub.domain.org
在 NGINX 中正确匹配。
我在 nginx 中有以下 vhost 配置:
upstream mybackendsrv {
server backend:5432;
}
server {
listen 80;
server_name sub.domain.org;
location / {
proxy_pass http://mybackendsrv;
}
}
当我使用像 sub.domain.org
这样的 server_name 时,我得到了默认的 nginx 回退并且我的服务器不匹配。
当我使用像 customroute
这样的 server_name 时,我得到了正确的行为并且我的服务器匹配。
我用谷歌搜索了一下这个问题,我相信 nginx 支持子域匹配,所以我不确定哪里出了问题。我检查了 access.log 和 error.log,但没有得到相关日志。
知道如何诊断吗?
我应该可以在 nginx 的调试模式下显示路由匹配逻辑,但我不知道如何实现。
感谢任何帮助。
经过调查,问题似乎与我们的 URL 是一个子域这一事实无关。
为了调试这种情况,在 /etc/nginx/nginx.conf
中的 log_format 指令中引入了一个 $host
变量:
log_format main '$remote_addr - $host - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
这个$host
变量可以理解sub.domain.org
有问题:当我们访问sub.domain.org
时,主机被更改为NGINX服务器的主机名,与[=相反16=] 哪个主机没有改变。
看来 sub.domain.org
不是简单的 DNS 配置,而是 Apache 代理传递配置。 Apache 在传递请求时更改了主机名,导致 NGINX 与重写的主机不匹配,因为它在请求主机中接收到它自己的主机而不是目标主机。
要纠正此行为,我们必须在 Apache 中添加以下配置:ProxyPreserveHost on
。
一旦我们重新启动 Apache,它的主机就会被保留,我们的 server_name sub.domain.org
在 NGINX 中正确匹配。