首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让NGINX重新解析DNS?

如何让NGINX重新解析DNS?
EN

Stack Overflow用户
提问于 2020-03-31 01:46:59
回答 1查看 536关注 0票数 0

我在router.mydomain.com有个中枢nginx反应。它对不同的nginxes有一些代理:

代码语言:javascript
运行
复制
server {
    listen 8080;
    server_name nginx_server;
    port_in_redirect off;

    location / {
        root /html;
        index index.html index.htm;
    }

    location  /site1/ {
        proxy_pass         https://site1.mydomain.com;
        proxy_buffer_size          128k;
        proxy_buffers              4 256k;
        proxy_busy_buffers_size    256k;
    }

    location  /site2/ {
        proxy_pass         https://site2.mydomain.com;
        proxy_buffer_size          128k;
        proxy_buffers              4 256k;
        proxy_busy_buffers_size    256k;
    }

这两个站点都是托管在kubernetes环境中的nginxes。

现在,问题是,每次我在kubernetes中部署site1或site2时,路由都会正确更新,所以如果https://site1.mydomain.com指向一个特定的docker实例#1,而新的部署是一个docker实例#2,那么url https://site1.mydomain.com how就指向docker实例#2。

这一切都很好,但router.mydomain.com一直指向首先解析到#1实例的IP。

代码语言:javascript
运行
复制
router ---> https://site1 ---> docker #1 (ip: 123.456.789)


router ---> https://site1 ---> docker #1 (ip: 123.456.789)
                          \--> docker #2 (ip: 234.567.890)


router ---> https://site1 -X-> docker #1 (ip: 123.456.789)
                          \--> docker #2 (ip: 234.567.890)

router (still pointing to ip: 123.456.789) -X-> https://site1 ---> docker #2 (ip: 234.567.890)

我怎样才能让nginx“注意到”dns的改变?我应该完全关闭dns缓存吗?我可以让nginx缓存dns的时间更短吗?多么?

EN

回答 1

Stack Overflow用户

发布于 2020-03-31 01:57:52

nginx有它自己的非阻塞解析代码,但是为了使用它,你需要指定一个使用resolver指令的解析器。Here你可以找到一些技术细节,为什么nginx的作者实现了这样的机制。您可以使用本地域名服务器,也可以使用外部域名服务器,如Google public DNS (8.8.8.8,8.8.4.4)或ISP为您提供的DNS:

代码语言:javascript
运行
复制
resolver 8.8.8.8;

您可以在上次解析的名称有效时指定超时时间:

代码语言:javascript
运行
复制
resolver 8.8.8.8 valid=30s;

除非您这样做,否则nginx只会在启动时从配置文件中解析您的域名一次。

对于您的情况,为您的域使用一个权威名称服务器是有意义的。为了获得该服务器的列表,您可以使用以下命令:

代码语言:javascript
运行
复制
nslookup -type=ns mydomain.com

您的最终配置将如下所示

代码语言:javascript
运行
复制
server {
    listen 8080;
    server_name nginx_server;
    port_in_redirect off;
    resolver <your_authoritative_name_server> valid=<timeout>;

    location / {
        root /html;
        index index.html index.htm;
    }

    location  /site1/ {
        proxy_pass         https://site1.mydomain.com;
        proxy_buffer_size          128k;
        proxy_buffers              4 256k;
        proxy_busy_buffers_size    256k;
    }

    location  /site2/ {
        proxy_pass         https://site2.mydomain.com;
        proxy_buffer_size          128k;
        proxy_buffers              4 256k;
        proxy_busy_buffers_size    256k;
    }
}

由于您使用的是docker,因此您可能也会对这个问题感兴趣:nginx in docker proxy path to subdomain

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60936400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档