【问题标题】:Nginx + dnsmasq = 'could not be resolved (5: Operation refused)'Nginx + dnsmasq = '无法解析(5:操作被拒绝)'
【发布时间】:2016-10-06 18:26:03
【问题描述】:

我正在尝试使用 docker、nginx 和 uwsgi 建立一个 django 站点: 我有一个 nginx docker 容器作为反向代理(称为 ceca-nginx-proxy),dnsmasq 正在运行,另一个 nginx(ceca-nginx)容器与 uwsgi 容器(ceca-uwsgi)通信,我可以使用连接curl(使用curl --resolve @987654321@ @987654322@)到ceca-nginx容器,我得到了在ceca-uwsgi容器中运行的django站点,问题是当我想通过ceca-nginx-proxy获取站点时:我收到了这个错误在我的 ceca-nginx-proxy 错误日志中:

ceca-nginx 无法解析(5:操作被拒绝),客户端:172.17.0.1,服务器:*.ceca.com,请求:“GET / HTTP/1.1”,主机:“172.17.0.8”

  • 172.17.0.1 是分配的docker ip
  • *.ceca.com 是 ceca-nginx-proxy 的 nginx 配置中定义的 server_name
  • 172.17.0.8 是 ceca-nginx-proxy ip
  • ceca-nginx-proxy反向代理的服务器块是:

    server {
        listen 80;
        server_name *.ceca.com;
        error_log   /tmp/proxy_error_nginx.log warn;
        access_log  /tmp/proxy_access_nginx.log;
    
        location / {
            set $example ceca-nginx;
            resolver 127.0.0.1;
            proxy_pass http://$example;
        }
    } 
    

    我在同一台机器上运行 dnsmasq 来解析 /etc/hosts 中的主机名(来自 docker 链接容器的主机名),如下所示:

    dnsmasq -q -8 /tmp/dnsmasq.log --port 53 -R -u root
    

    对于我在 dnsmasq.log 中看到的内容,主机名解析正常 [1] 但 nginx 抱怨并返回“502 Bad Gateway”页面。 如果有人能帮我解决这个问题,我将永远感激不尽,如果我们相遇,我会买很多啤酒和蕨类植物。

    [1]
    
    Jun  6 21:39:47 dnsmasq[321]: query[A] ceca-nginx from 127.0.0.1
    Jun  6 21:39:48 dnsmasq[321]: /etc/hosts ceca-nginx is 172.17.0.7
    Jun  6 21:39:48 dnsmasq[321]: query[AAAA] ceca-nginx from 127.0.0.1
    

【问题讨论】:

  • 尝试将解析器从 127.0.0.1 更改为 172.17.0.1,我认为您的 dnsmasq 没有从 ceca-nginx-proxy 获得 dns 查询
  • 感谢 Lution 的建议,但是 dnsmasq 正在 ceca-nginx-proxy 上运行,我可以在 dnsmasq 日志中看到正在解析 ip ok,它一定是别的东西......跨度>
  • 检查 dnsmask 返回到 AAAA 查询的内容。看起来它返回 REFUSED,这是你的问题。
  • 嗯,解决方案是使用resolve 127.0.0.1;,但没有运行dnsmasqnginx 1.10...我不知道为什么,但现在它正在工作

标签: nginx docker hosts dnsmasq


【解决方案1】:

您的问题似乎与 Nginx resolver 指令配置有关。 默认情况下,Nginx 将尝试解析 IPv4 和 IPV6 地址。它将从 DNS 服务器(在您的情况下为 dnsmasq)获取第一个响应,将其缓存并落入异常 Operation refused,因为它无法将 DNS 名称解析为 IPv6 地址。解决方案是将 ipv6=off 添加到您的 resolver 指令中,因此它应该如下所示:

...
resolver 127.0.0.1 ipv6=off;
...

这将强制 Nginx 停止将 DNS 记录解析为 IPv6。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2013-10-04
    • 2015-07-30
    • 2018-06-27
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多