0

再会!我在 nginx 配置中配置了 upstream 和 proxypass。配置中的任何地方都没有关于域名的信息。上游包含同一个站点所在的主机xxx和yyy的ip地址。Nginx 监听主机 zzz 的 443 端口,并将请求重定向到两台主机之一。证书包含有关域名的信息。尝试通过这个域名时,nginx重定向到主机xxx或yyy,但是我不明白如果我们通过域名,它是如何做到的,并且nginx将请求重定向到ip地址。该配置还包括证书验证。问题的症结所在:如果它们没有以任何方式明确相关,nginx 如何通过域名将请求重定向到 IP 地址?

UPD。该证书包含域名 DOMAIN_NAME。当导航到 DOMAIN_NAME 时,nginx 在 zzz 处获取此请求并重定向到 xxx 或 yyy。所有这些主机都有证书。我对将请求从域名重定向到 IP 地址的原理很感兴趣。

upstream name {
    least_conn;
    server xxx:1448;
    server yyy:1448;
}

server {
    listen 443 ssl;
    listen 4443 ssl;
    server_name  zzz;
    ssl_certificate /path/to/cert;
    ssl_certificate_key /path/to/private/key;
    access_log  /var/log/nginx-access.log upstreamlog;

    location /loc {
        proxy_pass              https://name/loc;
        proxy_set_header        Host                    $host;
        proxy_set_header        X-Real-IP               $remote_addr;
        proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
        proxy_http_version      1.1;
    }
    ...
}
4

1 回答 1

0

这三个主机的关系是上游和服务器配置部分,例如:

上游段

upstream upstream_name {
 server 192.168.1.xxx weight=5;
 server 192.168.1.yyy weight=5;
}

服务器部分(部分)

server {
    host zzz.domain_suffix;
    location / {
        proxy_pass http://upstream_name;
        #if your xxx and yyy host need a host name to identify the domain,you can set proxy header
        #proxy_set_header Host subHost.domain_sufixx
    }
}

基于上例,流程为:

用户

-> 主机 zzz.domain_suffix

-> 选择 xxx 或 yyy 来处理这个请求(根据上游部分选择子服务器)

-> xxx 或 yyy 将响应返回给主机 zzz.domain_suffix -> zzz.domain_suffix 返回此响应

-> 用户

评论

用户通过ssl验证导航到zzz.domain_suffix,但是zzz.domain_suffix到xxx或者yyy不需要ssl验证,因为zzz到xxx或者yyy使用的是http协议,当然也可以使用https协议,只要加上proxy_set_header Host即可您必须在这两个主机(xxx 和 yyy)上部署相应的证书。

于 2020-09-14T05:15:24.393 回答