【问题标题】:Configure Nginx with two docker-compose containers (Flask and Django)使用两个 docker-compose 容器(Flask 和 Django)配置 Nginx
【发布时间】:2020-08-02 05:17:08
【问题描述】:

我正在尝试公开两个不同的地址,例如 API。一个在 Django 中,另一个在 Flask 中,它们是 Docker-compose 容器。

我需要配置 Nginx 以在两个不同的子域中公开两个容器。

这是我的 Nginx.conf:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
 worker_connections  1024;  ## Default: 1024, increase if you have lots of clients
 }    

http {
  include       /etc/nginx/mime.types;
  # fallback in case we can't determine a type
  default_type  application/octet-stream;

 log_format  main  '$remote_addr - $remote_user [$time_local] 
"$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  65;

upstream app {
 server django:5000;
}

upstream app_server {
 server flask:5090;
}

server {
 listen 5090;
 location / {
    proxy_pass http://app_server;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Scheme $scheme;
  }
}

server {
 listen 5000;
 location / {
    proxy_pass http://app;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Scheme $scheme;
 }
 }

}

还有我的 production.yml

Nginx:
  build: ./compose/production/nginx
  image: *image
  ports:
    - 80:80
  depends_on:
    - flask
    - django

我的容器都装好了。

【问题讨论】:

  • 你告诉nginx在端口80上运行然后你有server块在端口5000上监听而没有server_name。因此,如果这是您的实际配置,那么是的,您会遇到一些麻烦。
  • 您好,感谢您的回复。那么,我必须在哪里更改端口?因为如果我更改 production.yml 中的端口并将 80:80 替换为 5090:5090 我会出错。
  • 错误:对于 nginx 无法启动服务 nginx:驱动程序在端点 core_nginx_1 上编程外部连接失败(7b49e70c117f45cf00fde7488626897a22657cdf73ac9d07d1d546b55986ae7d):绑定 0.0.0.0:5090 失败:端口已分配

标签: django nginx flask docker-compose


【解决方案1】:

我用proxy_pass:

server {
    listen <port>;
    location / {
        proxy_pass http://<container-host-name>:<port>;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Scheme $scheme;
    }
}

你的 nginx 容器只连接机器上的 80 端口和容器上的 80 端口,但你的 nginx 服务器监听 50005090 端口:)

【讨论】:

  • 我更改了配置,但没有在 production.yml 中,因为如果我更换端口,它会响应我的错误。现在,我使用与您的答案类似的配置编辑了帖子,并且容器正在工作。
  • 更改机器端口时出现错误,因为http默认使用80端口。您可以更改容器端口,例如 80:5000 或 80:5090。但在这种情况下,您将只有一台服务器。我建议您制作一台服务器,列出 5000 端口,在 production.yml 中将端口更改为 80:5000,并使用不同的位置,如 /django 和 /flask。使用此配置,当您有类似 http:///django 的请求时,它将代理到 django 机器,而当 http:///flask 到烧瓶机器时。但是你也应该为proxy_pass 设置端口
  • 最后,我删除了 Flask 容器。使用它的唯一原因是熊猫不在 python:alpine 中工作。我不会用alpine,我会用python。
  • 我希望你明白如果你有两个或更多的容器你需要做什么:)
  • 现在,我还有一个问题,但这是其他历史:stackoverflow.com/questions/61330761/…
猜你喜欢
  • 2020-04-30
  • 2019-01-08
  • 2017-11-19
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多