Home > database >  Not found error with two Node projects served by NGINX with Docker
Not found error with two Node projects served by NGINX with Docker

Time:01-19

I'm learning Docker and my goal is to serve two Node.js projects whit same docker-compose using NGINX. My two project(A and B) are simple hello world:

'use strict';

const express = require('express');

// Constants
const PORT = 8301;
const HOST = '0.0.0.0';
const PATH = '/project-a';

// App
const app = express();
app.get(PATH, (req, res) => {
  res.send('<h1>Hello World</h1><p>Project A</p>');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}${PATH}`);

Above there is A, B has the same code but change only port 8302 and path /project-b. Below the docker-compose:

version: '3.7'

services:
  website_a:
    image: project_a/node
    build:
      context: ./projects_a
      dockerfile: Dockerfile
    container_name: project_a
    restart: always
    command: sh -c "node server.js"
    expose:
      - 8301

  website_b:
    image: project_b/node
    build:
      context: ./projects_b
      dockerfile: Dockerfile
    container_name: project_b
    restart: always
    command: sh -c "node server.js"
    expose:
      - 8302

  nginx:
    image: node-project-multisite/nginx
    build: nginx
    container_name: multisite_project_nginx
    ports:
      - 80:80
    depends_on:
      - website_a
      - website_b

And the nginx's conf:

server {
    listen 80;
    listen [::]:80;
    server_name  127.0.0.1;

    # Logging
    access_log             /var/log/nginx/access.log;
    error_log              /var/log/nginx/error.log;

    location /project-a {
        proxy_pass http://website_a:8301/project-a;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        # max uploadable file size
        client_max_body_size 4G;
    }

}

server {
    listen 80;
    listen [::]:80;
    server_name  127.0.0.1;

    # Logging
    access_log             /var/log/nginx/access.log;
    error_log              /var/log/nginx/error.log;

    location /project-b {
        proxy_pass http://website_b:8302/project-b;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        # max uploadable file size
        client_max_body_size 4G;
    }

}

Using the docker-compose without NGINX I can see both hello world, but with NGINX I can use only A, in B there is the message below:

enter image description here

Where I put a mistake?

CodePudding user response:

You should use only one "server" since they share server_name and port

server {
    listen 80;
    listen [::]:80;
    server_name  127.0.0.1;

    # Logging
    access_log             /var/log/nginx/access.log;
    error_log              /var/log/nginx/error.log;

    location /project-a {
        proxy_pass http://website_a:8301/project-a;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        # max uploadable file size
        client_max_body_size 4G;
    }

    location /project-b {
        proxy_pass http://website_b:8302/project-b;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        # max uploadable file size
        client_max_body_size 4G;
    }

}
  •  Tags:  
  • Related