Nginx + dnsmasq ='无法解决(5:操作被拒绝)'

时间:2016-06-07 02:03:40

标签: nginx docker hosts dnsmasq

我尝试使用docker,nginx和uwsgi设置django网站: 我有一个nginx docker容器作为反向代理(称为ceca-nginx-proxy)运行dnsmasq运行,另一个nginx(ceca-nginx)容器与uwsgi容器(ceca-uwsgi)通信,我可以使用curl(使用curl --resolve http://test.ceca.com http://172.17.0.7)连接到ceca-nginx容器并且我在ceca-uwsgi容器中运行django站点,问题是当我想通过ceca-nginx-proxy获取站点时:I&# 39;我的ceca-nginx-proxy错误日志中出现此错误:

  

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

  • 172.17.0.1是docker ip assigned
  • * .ceca.com是ceca-nginx-proxy&n; nginx config中定义的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中看到的内容,主机名正在解析ok [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
    

1 个答案:

答案 0 :(得分:5)

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

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

这将迫使Nginx停止将DNS记录解析为IPv6。