(从服务器故障交叉发布)
我们有一个 nginx (OpenResty 1.4.2.7) 实例充当负载均衡器。它有两个服务器指令,一个服务于一个特定站点(我们称之为 www.our-special-host.com),一个通配符用于其他所有内容。我们正在尝试对其进行配置,以便根据两个服务器指令的后端中的哪一个已关闭来显示不同的 502 错误页面。
我们的配置适用于 HTTP,但不适用于 HTTPS。如果我们关闭后端并点击 www.our-special-host.com,我们会得到 HTTP 和 HTTPS 的相应错误。但是,如果我们访问任何其他托管站点,我们会得到正确的 HTTP 错误页面,但对于 HTTPS,我们会得到 www.our-special-host.com 的错误页面。
这是我们的配置(稍作编辑):
server {
server_name www.our-special-host.com
listen 80;
listen 443 ssl;
error_page 502 /nginx_errors/loadbalancer_502_on_special_host.html;
location /nginx_errors/ {
alias /path/to/nginx_errors/;
}
location / {
proxy_pass x.x.x.x;
...
}
ssl_certificate certificate.crt;
ssl_certificate_key pk.key;
}
server {
listen 80;
listen 443 ssl;
error_page 502 /nginx_errors/loadbalancer_502_on_other_hosts.html;
location /nginx_errors/ {
alias /path/to/nginx_errors/;
}
location / {
proxy_pass y.y.y.y;
...
}
ssl_certificate certificate.crt;
ssl_certificate_key pk.key;
}
(所有相关主机都是XXX.ourdomain.com,证书是*.ourdomain.com。)
我们还尝试向第二个服务器块添加一个明确的包罗万象的正则表达式,即。
server_name ~^.*$;
行为仍然是错误的,但不同的是错误:
- 带有http的“特殊”站点:我们得到错误的错误页面 loadbalancer_502_on_other_hosts.html
- 带有https的“特殊”站点:我们得到正确的错误页面 loadbalancer_502_on_special_host.html
- 带有http的“非特殊”站点:我们得到正确的错误页面 loadbalancer_502_on_other_hosts.html
- 带有https的“非特殊”站点:我们得到正确的错误页面 loadbalancer_502_on_other_hosts.html