【发布时间】:2021-05-02 15:55:03
【问题描述】:
我尝试部署具有以下架构的应用:
- 后端基于 dockerized Django Rest Framework,gunicorn 监听 127.0.0.1:8000
- 前端基于 VueJS(未 dockerized)并调用我的后端 API 路由
- NginX 用于服务前端页面并将 API 请求代理到 gunicorn
这是我的后端 docker-compose 文件的摘录:
server:
build:
context: .
dockerfile: ./docker/server/Dockerfile
image: myserverimage
command: 'gunicorn --bind=127.0.0.1:8000 --workers=3 my_backend.wsgi:application'
ports:
- 8000:8000
docker-compose up 告诉我这部分一切正常(服务器已启动,gunicorn 正在监听127.0.0.1:8000)
这里是来自 nginx 配置的服务器块:
upstream backend {
server 127.0.0.1:8000;
}
server {
listen 443 default_server ssl;
server_name mydomain.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
access_log /var/log/nginx/mydomain.access.log;
location / {
root /path/to/vue/project/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
location /backend/ {
proxy_pass http://backend/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
我可以在 mydomain.com 访问我的前端页面,但对 mydomain.com/backend 的请求返回 502 bad gateway 错误。
如果我在 nginx 上游声明和 gunicorn 命令中将 127.0.0.1:8000 更改为 backend-container-ip:8000,它可以工作。
所以我的问题是:有没有办法配置这样的架构而不必知道容器 ip(我不想硬编码,尤其是在 docker-compose 声明中)? 我是否应该使用 nginx 创建一个额外的容器,即使我的前端不是基于 docker-compose 定义的?
【问题讨论】:
标签: docker nginx docker-compose gunicorn