我有点困难,确定为什么nginx和uwsgi没有为我的django应用程序服务。 这是来自nginx日志的问题。
nginx-01: 2015/12/06 07:47:50 [error] 10#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: , request: "GET / HTTP/1.1", upstream: "uwsgi://0.0.0.0:8001", host: "54.252.197.191"
因此,uwsgi和django使用以下文件设置驻留在一个容器中。
[uwsgi] http-socket = :8001 chdir = %dsrc/myproject/ env = DJANGO_SETTINGS_MODULE=myproject.settings module = myproject.wsgi:application master = true processes = 4
我的docker文件启动uwsgi和我公开端口8001到主机
CMD ["uwsgi", "uwsgi.ini"]
我的第二个容器是nginx有以下nginx虚拟主机设置。
upstream uwsgi_django { server 0.0.0.0:8001; } server { listen 80; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; uwsgi_pass uwsgi_django; include /etc/nginx/uwsgi_params; } location = /favicon.ico { log_not_found off; } }
这是我的容器从dockerps。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 16f181bafb61 ccbf828a3ab2 "nginx -g 'daemon off" 7 minutes ago Up 7 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx-container 33d4d5d17ca3 65ad56e6756c "uwsgi uwsgi.ini" 13 minutes ago Up 13 minutes 0.0.0.0:8001->8001/tcp django-container 688f4b0f9e29 postgres "/docker-entrypoint.s" 7 hours ago Up About an hour 0.0.0.0:5432->5432/tcp postgres-container
如果我从主机curl 0.0.0.0:8001我回到django项目的欢迎页面。 但是,如果我尝试从浏览器中查看它,我得到一个502错误的网关错误(这在我眼里似乎链接设置uwsgi正确,但有一些问题之间的nginx与uwsgi进行通信。
这是你的问题:
upstream uwsgi_django { server 0.0.0.0:8001; }
如果进程位于同一台主机,虚拟机或容器中,这只会“起作用”,因为它试图build立到同一台机器的连接。 当他们在不同的容器,它不起作用。
您需要更改您的nginxconfiguration,以便使用uwsgi容器的内部IP地址。 你如何做到这一点取决于你如何创build你没有指定的容器。 检查相关文件。