0

I am trying to develop a distributed Angular app deployed on Nginx that should connect to a backend service.

docker-compose.yml:

version: '3'
services: 
  backend_service_1:
    build:
      context: ./app
      dockerfile: Dockerfile
    ports:
      - "3001:5000"
    networks: 
      - my-network

  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile.3      
    ports:
      - "3000:80"
    networks: 
      - my-network
    links:
      - backend_service_1

networks: 
  my-network:

nginx.conf:

upstream backend {
  server backend_service_1:3001;
}

server {
  listen 80;
  server_name localhost;

  location / {
    root /usr/share/nginx/html/ki-poc;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }

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

I can access the app on localhost:3000. I can also get a response from the backend service on localhost:3001 using the browser. However, when I try to get a response from the backend service using the proxy on localhost:3000/backend I receive the following error message: [error] 5#5: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /backend HTTP/1.1", upstream: "http://172.20.0.2:3001/", host: "localhost:3000"

Can you tell my, why the request to the linked backend container is getting refused?

2 Answers 2

1

You shoul use the port of the container in the nignx config, not the one of the host.

upstream backend {
    server backend_service_1:5000;
}
Sign up to request clarification or add additional context in comments.

Comments

0

localhost:3000, localhost:3001 both are direct connecting to each app. but <> is proxy_pass, so if you want to use this, you should run "localhost:80/backend" and you want to enter the backend via frontend,

 location / {
     proxy_pass http://localhost:3000/;
 }

so, -> http:youraddress/ => 80 port, '/' =>localhost:3000/ => frontend ///////// http:youraddress/backend => 80 port, '/backend' => localhost:3000/backend

If you show me your DOCKERFILE, get better answer

or server_name ... localhost; => _;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.