我尝试使用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"
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
答案 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。