Nginx简单代理在Docker中不起作用

时间:2018-12-17 21:49:15

标签: docker nginx docker-compose nginx-reverse-proxy

我有一个后端和一个前端,它们在Docker中的两个容器中运行,并且都可以通过其端口通过我的浏览器进行访问:

localhost:8081 # frontend
localhost:8082 # backend

现在,我想使用一个Nginx服务器来接收所有流量(端口80)并重定向:

localhost -> to frontend
localhost/api -> to the backend

尝试了nginx.conf文件中的几乎所有内容(没有任何效果)后,我在SO问题中发现必须修改的文件是:

  

/ etc / nginx / sites-enabled / default

所以我尝试对其进行修改,然后nginx运行。对于运行,我的意思是至少当我访问localhost时,会显示nginx欢迎页面。但是,我仍然无法进行nginx路由通信(代理方式,不能重定向)。

现在我的docker-compose文件具有以下外观(nginx的代码段以及这两个服务):

  nginx:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./Dockerfiles/nginx/default:/etc/nginx/sites-enabled/default
    links:
      - frontend
      - backend
    depends_on:
      - frontend
      - backend
  frontend:
    build: ./Dockerfiles/frontend
    volumes:
      - ./Dockerfiles/frontend/www/src:/usr/src/app
      - ./logs/frontend/httpd:/var/logs/httpd
    ports:
      - "8081:3000"
    links:
      - backend
  backend:
    build: ./Dockerfiles/backend
    volumes:
      - ./Dockerfiles/backend/www:/var/www/html
      - ./logs/backend/httpd:/var/logs/httpd
    ports:
      - "8082:80"
    links:
      - "database"
      - "redis"
    depends_on:
      - database
      - redis

如前所述,我的default文件是nginx的配置文件:

server {
        listen 80 default_server;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.php index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
            proxy_pass http://frontend:8081/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }

        location /api {
            proxy_pass http://backend:8082/public/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }

}

例如,当我尝试访问/api网址时,nginx告诉我的错误是:

  

nginx_1 | 2018/12/17 21:44:09 [错误] 6#6:* 1 open()“ / usr / share / nginx / html / api”失败(2:没有此类文件或目录),客户端:172.20.0.1 ,服务器:本地主机,请求:“ GET / api HTTP / 1.1”,主机:“本地主机”

似乎正在尝试从本地文件系统中检索文件(鉴于配置文件,这是我所无法理解的。)

有什么线索,想法或提示吗?

1 个答案:

答案 0 :(得分:1)

将服务器配置放在var jointRowsArray = sheet .getRange(2, 1, 2, 3) //A2:C4 .getValues() .map(function(row) { return [row.join(' ')];//join Each row }); sheet.getRange(2, 4, jointRowsArray.length, 1).setValues(jointRowsArray); 中,而不是在启用站点的地方。

文档:https://hub.docker.com/_/nginx/

此外,您稍后将面临另一个问题。将/etc/nginx/conf.d/default.conf更改为http://frontend:8081/;。因为nginx是直接联系前端容器,而不是整个主机。