簡體   English   中英

當嘗試連接到節點應用程序作為反向代理時,Nginx連接被拒絕

[英]Nginx connection refused, when trying to connect to node app as reverse proxy

我嘗試使用docker容器構建一個webapp,當我嘗試將Nginx作為我的節點應用程序的反向代理運行時,我得到連接被拒絕。 我不確定它是否是nginx服務器配置問題或docker-compose配置問題。

[error] 5#5: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: foo.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:7770/", host: "foo.com"

我在點擊foo.com時遇到這個錯誤,奇怪的是我的應用程序在引用端口號時工作,所以foo.com:7770運行應用程序。

我的nginx服務器配置:

server {
    listen       80;
    server_name  foo.com;

    port_in_redirect off;
    autoindex on;

    location / {
        proxy_pass http://127.0.0.1:7770;
        proxy_redirect off;
        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;
    }
}

我的Docker撰寫文件:(這里可能有一些多余的東西)

version: "2"
services:
  nginx:
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - app
    links:
      - app
  app:
    build:
      context: .
      dockerfile: DockerFile
    ports:
      - "7770:7770"
    links:
      - mongo
    depends_on:
      - mongo
  mongo:
    image: mongo
    ports:
      - "27017:27017"
    volumes_from:
      - mongodata
    depends_on:
      - mongodata
  mongodata:
    image: tianon/true
    volumes:
      - /data/db

我的節點Dockerfile:

FROM node:latest

ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/

WORKDIR /opt/app
ADD . /opt/app

EXPOSE 7770

CMD ["npm", "start"]

我的ngnix Dockerfile

FROM nginx:1.10

COPY default.conf /etc/nginx/conf.d/default.conf

在npm開始,這將運行:

app.get('*', function(req, res) {
  res.sendFile(path.join(__dirname, 'index.html'));
});

app.listen(7770, function(err) {
  if (err) {
    console.log(err);
    return;
  }

  console.log('Listening at http://localhost:7770');
});

這是我第一次在碼頭工作,所以我可能搞砸了一些事情。 另外,我將foo.com指向/ private / etc / hosts中的127.0.0.1。

C-霍姆斯

首先,您需要記住每個容器都有自己的網絡堆棧,因此您無法在容器內使用localhost來訪問在docker主機中運行的服務。

對於此特定項目,您需要將Nginx服務器配置中的proxy_pass指令指向到達app容器的值。 就像是:

proxy_pass http://app:7770;

您需要做正確的事,因為在docker-compose上下文中,您的容器名稱將映射到內部DNS條目。 這樣,您就不需要將7770的應用程序容器發布到外部世界,如果您的應用程序容器只能訪問您的MongoBD,您也不需要發布27017端口。

如果要將流量從nginx路由到app ,則必須在proxy_pass上使用ip地址或app容器的dns。 使用Docker Compose服務可以使用服務名稱發現彼此,因此更改nginx conf

proxy_pass http://app:7770;

您不需要將端口7770發布到外部世界。 同樣對於mongo,您不需要發布27017端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM