利用Nginx实现动态地址解析

转载:https://www.escapelife.site/posts/289036b4.html

 

要实现 Nginx 动态地址解析,查阅

  • 最近工作中有一个反向代理的需求,就是给客户提供一个 data.wsescape.com 的域名用来访问内部提供的 API 接口。但是提供接口的服务器在另外一台主机上面,所以需要对请求进行二次转发,转发到 data.misssun.com 这个域名下面。

  • 首先想到的是,使用 upstream 进行反向代理就可以很好地解决这个问题,但是因为 data.misssun.com 这个域名对应的服务器 IP 地址会动态的变化,导致 upstream 反向代理会出现 502 的情况。

  • 通过查阅资料,发现可以通过制定 resolver 字段对域名进行间隔时间的解析,可以完美的实现动态地址解析的效果。通过 resolver 可以配置多个 DNS 服务器地址,Nginx 会采用轮询的方式去访问 DNS 服务,Nginx 会缓存 DNS 对域名解析的结果,缓存的时间由 valid 指定。

nginx

user nginx;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    # Logging Settings
    log_format wsescape '$remote_addr - $remote_user [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '$request_length $request_time $upstream_response_time '
                      '"$http_referer" "$http_user_agent"';

    # Domain name resolution
    resolver 114.114.114.114 valid=5s;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepable_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Gzip Settings
    gzip  on;
    gzip_buffers     4 8k;
    gzip_types
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/json
        application/xml
        application/rss+xml
        font/truetype
        font/opentype
        application/font-woff
        application/vnd.ms-fontobject
        image/svg+xml;

    server {
        listen       80;
        server_name  data.wsescape.com;

        access_log /var/log/nginx/wsescape.nginx.access.log  wsescape;
        error_log  /var/log/nginx/wsescape.nginx.error.log   error;

        set $realip "data.misssun.com";

        location / {
            return 404;
        }

        location /api/ {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_http_version 1.1;
            if ($request_uri ~* "/api/app/data\?id=(.*)") {
                set $id $1;
                rewrite .* /api/data/$id break;
                proxy_pass http://$realip:1556;
            }
        }
    }
}

了官方文档,才发现官方解释说的非常清楚:说是在反向代理的使用场景中,当 upstream 后端用域名时,配置 resolver 以便于 Nginx 能够解析该域名。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Nginx的虚拟主机有以下几种实现方式: 1. 基于不同的Server Name配置虚拟主机:在Nginx的配置文件中可以针对不同的域名或主机名配置不同的虚拟主机。 2. 基于不同的IP地址配置虚拟主机:在同一台服务器上分配多个IP地址,并在Nginx的配置文件中为不同的IP地址配置不同的虚拟主机。 3. 基于不同的端口配置虚拟主机:在同一台服务器上为Nginx分配多个端口,并在Nginx的配置文件中为不同的端口配置不同的虚拟主机。 4. 基于不同的目录配置虚拟主机:在同一个域名IP地址下,可以根据不同的URL路径配置不同的虚拟主机,实现不同的站点或应用程序。 这些实现方式可以单独或组合使用,以满足不同的需求和场景。 ### 回答2: Nginx的虚拟主机有以下几种实现方式: 1. 基于端口的虚拟主机:通过监听不同的端口来区分不同的域名,并将请求转发到相应的虚拟主机。例如,可以将80端口用于一个域名的虚拟主机,将8080端口用于另一个域名的虚拟主机。 2. 基于IP的虚拟主机:通过为每个域名配置独立的IP地址实现虚拟主机。每个IP地址对应一个域名,当收到请求时,根据IP地址将请求分发到对应的虚拟主机。 3. 基于域名的虚拟主机:通过配置不同的域名来区分虚拟主机。当接收到请求时,Nginx解析请求的域名,并根据域名将请求转发到相应的虚拟主机。 4. 基于正则表达式的虚拟主机:Nginx支持使用正则表达式对请求的域名进行匹配,并根据匹配的规则将请求转发到相应的虚拟主机。这种方式非常灵活,可以根据需要配置各种复杂的规则。 无论是哪种方式,Nginx通过解析请求的域名或端口来实现虚拟主机的区分,然后将请求转发到相应的虚拟主机。通过这种方式,可以在同一个服务器上托管多个不同域名的网站,提高服务器的资源利用率。 ### 回答3: nginx的虚拟主机有两种实现方式:基于IP地址和基于域名。 首先是基于IP地址的虚拟主机。这种方式通过为每个虚拟主机配置一个独立的IP地址实现。当请求到达服务器时,nginx会根据请求的IP地址来匹配对应的虚拟主机配置。这种方式的优点是可以直接通过IP地址来访问指定的虚拟主机,适用于需要绑定不同IP地址的场景。但缺点是IP地址有限,难以满足大规模的需求。 其次是基于域名的虚拟主机。这种方式通过配置不同的域名实现。当请求到达服务器时,nginx会根据请求的域名来进行匹配。可以通过配置多个虚拟主机配置文件,每个文件中指定不同的域名和相关设置。这种方式的优点是可以方便地添加、修改和删除虚拟主机,并且可以在一个IP地址上托管多个域名。同时,还可以通过配置SSL证书实现HTTPS加密传输。这是应用最广泛的虚拟主机实现方式。 总结起来,nginx的虚拟主机可以通过基于IP地址或者基于域名的方式来实现。根据具体需求选择合适的方式,可以更好地满足不同的业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值