С Новым годом! Форум программистов, компьютерный форум, киберфорум
DevOps, облачные платформы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827

Не запускаются контейнеры с nginx и aiohttp для бэка в подпроекте

22.01.2024, 14:39. Показов 1633. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Пробую научиться работать со сложной структурой проекта на пайтон, где есть бэкенд и фронт. Для начала хочу создать html-заглушку для фронта и вывод json для бэка, а потом уже добавлять роуты, вьюшки, БД и прочее.
Фронт в контейнере поднимается, заглушка работает, изменения руками в заглушке отображаются. А для бэка создал простейший файл пайтона с выводом приветствия в формате json, типа: "Привет, мир". Этот файлик работает в плоском проекте, а при помещении его в этот проект, страница не отвечает. По идее должен быть localhost:8081 (в плоском отвечает на 8080)
Вот такой файлик пайтона (main.py):
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from aiohttp import web
import json
 
async def handler(request):
    context = {'name': 'Вася'}
 
    # Возвращаем данные в формате JSON
    return web.json_response(context)
 
 
app = web.Application()
app.router.add_get('/', handler)
 
if __name__ == '__main__':
    web.run_app(app, port=8080)

Вот такая структура проекта:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
project-root/
│
├── api/
│   ├── docker/
│   │   ├── development/
│   │   │   ├── nginx/
│   │   │   │   ├── conf.d/
│   │   │   │   │   └── default.conf    # Конфигурация для бэкенда
│   │   │   │   ├── Dockerfile
│   ├── public/
│   │   ├── main.py
│   │   └── favicon.ico
│   ├── media/
│   ├── __init__.py
│   ├── Dockerfile
│   ├── requirements.txt
│   └── storage/
│
├── frontend/
│   ├── docker/
│   │   ├── development/
│   │   │   ├── nginx/
│   │   │   │   ├── conf.d/
│   │   │   │   │   └── default.conf    # Конфигурация для фронтенда
│   │   │   │   ├── Dockerfile
│   ├── public/
│   │   ├── css/
│   │   ├── js/
│   │   ├── img/
│   │   ├── app.css
│   │   ├── favicon.ico
│   │   ├── index.html  # Перемещенный шаблон
│   │   └── ...
│   ├── __init__.py
│   └── requirements.txt
│
├── postgres/
│   ├── data/
│   ├── init.sql
│   └── Dockerfile
│
├── .env
├── docker-compose.yml
├── Makefile
└── README.md

Вот такой default.conf для бэка
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
    listen 80;
    charset utf-8;
    index index.html;
    root /app/public;
 
    location / {
        proxy_pass http://api-aio:8081;
        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-Proto $scheme;
        proxy_redirect off;
    }
 
    location /static/ {
        alias ./api/public/;
    }
}

Вот такой Докерфайл для Nginx для бэка
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
FROM nginx:1.17-alpine
 
COPY ./conf.d /etc/nginx/conf.d
 
WORKDIR /app

ВОт такой Докерфайл для AIOHTTP в бэке
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
# Используйте базовый образ Python из Alpine
FROM python:3.10-alpine
 
# Установите зависимости
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
 
# Копируйте все файлы из текущего каталога в /app в образе
COPY . /app/
 
# Запустите приложение при старте контейнера
CMD ["python", "main.py"]

файл зависимостей для бэка:
Кликните здесь для просмотра всего текста
Code
1
2
3
aiohttp==3.8.1 # наш фрейворк
jinja2==3.0.1
aiohttp-jinja2==1.4.2 # модуль для работы с HTML-шаблонами

Вот такой докер-композ файл:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
version: "3.7"
services:
  frontend:
    container_name: front
    build:
      context: frontend/docker/development/nginx
    ports:
      - "8080:80"
    volumes:
      - ./frontend:/app
 
  api:
    container_name: api-nginx
    build:
      context: api/docker/development/nginx
    ports:
      - "8081:80"
    volumes:
      - ./api:/app
    depends_on:
      - api-aio
 
  api-aio:
    container_name: api-aio
    build:
      context: api/
    volumes:
      - ./api:/app

Скорее всего нупутал с путями в конфиге, но не пойму где что и почему.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2024, 14:39
Ответы с готовыми решениями:

Ansible role для устаноки и настройки nginx конкретной версии из репозиториев Nginx
Написать Ansible role для устаноки и настройки nginx конкретной версии из репозиториев Nginx

Доступ ресурса одного подпроекта в другом подпроекте
Добрый день. Не сочтите за неуважение, но потратил уже достаточно времени, а так и не разобрался в вопросе. У меня есть два подпроекта...

Архитектура бэка
Приветствую! Есть backend на .net framework, который будет переписываться на .net core 7, хранилище в mssql и elasticsearch. Будет...

11
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.01.2024, 17:06
не понимаю идею с двумя nginx отдельными, поэтому спрошу первое что бросилось в лицо -
питоновый скрипт должен слушать на 8080 или 8081?

сейчас на 8080
web.run_app(app, port=8080)
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
22.01.2024, 17:15  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
сейчас на 8080
web.run_app(app, port=8080)
Нет, это пример для плоского проекта, где всего один файл. Я об этом выше написал в пояснении. А для сложного проекта используется 8081
Python
1
web.run_app(app, port=8081)
В этом файле меняется только одна эта строка.
Цитата Сообщение от Jabbson Посмотреть сообщение
не понимаю идею с двумя nginx отдельными, поэтому спрошу первое что бросилось в лицо -
питоновый скрипт должен слушать на 8080 или 8081?
Два nginx потому что один для фронта, другой для бэка, чтоб можно было одновременно работать и там и там, например один человек делает фронт, другой - бэк. Это ж не продакшен. Поэтому питоновский скрипт должен слушаться на 8081, поскольку это бэк.
Но в любом случае, что-то у меня даже один этот файл не получилось поместить в контейнер. Видать совсем запутался, хотя перед этим делал такое, вот и решил сделать следующий шаг
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.01.2024, 17:42
Лучший ответ Сообщение было отмечено DyadyaGe как решение

Решение

для api-aio контекст - api/

в Докерфайл для AIOHTTP:
Code
1
2
3
4
5
# Копируйте все файлы из текущего каталога в /app в образе
COPY . /app/
 
# Запустите приложение при старте контейнера
CMD ["python", "main.py"]
то есть копируется все из папки api сохраняя структуру. В этом случае учитывая "WORKDIR /app" путь к main.py будет "public/main.py", а не просто "main.py".
1
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
22.01.2024, 19:33  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
то есть копируется все из папки api сохраняя структуру. В этом случае учитывая "WORKDIR /app" путь к main.py будет "public/main.py", а не просто "main.py".
Да, это я ступил, почему-то подумал, что вся папка API вместе с самой папкой скопируются. Так что не только тут оказывается надо было поменять, но ещё и в пайтоновском файле:
Python
1
2
# Настройка статических файлов
app.router.add_static('/static/', path='./public', name='static')
Осталось только понять, реально ли мне нужен каталог "public" в подпроекте API. Потом думаю, будет проще
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
23.01.2024, 14:59  [ТС]
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Осталось только понять, реально ли мне нужен каталог "public" в подпроекте API. Потом думаю, будет проще
На самом деле, видимо, не все так просто и это далеко не последняя проблема на этом этапе.
Цитата Сообщение от Jabbson Посмотреть сообщение
то есть копируется все из папки api сохраняя структуру. В этом случае учитывая "WORKDIR /app" путь к main.py будет "public/main.py", а не просто "main.py".
Стал смотреть, где ещё такое может быть. У меня в default.conf для бэка (из шапки темы) есть такая строка:
Цитата Сообщение от DyadyaGe Посмотреть сообщение
location /static/ {
alias ./api/public/;
}
Брал то я её по образцу. Попробовал заменить на " alias ./public/;" но вроде ничего не поменялось в работе. Пробовал сделать " alias ./app/public/;", тоже ничего не меняется. Пробовал выше заменить "root /app/public;" на "root /public;" и тоже ничего не меняется, либо я не понимаю, как его ещё можно проверить и на что оно влияет.

И из всего этого вытекает ещё один вопрос, который касается вашего интереса про
Цитата Сообщение от Jabbson Посмотреть сообщение
не понимаю идею с двумя nginx отдельными
Можно ли создать контейнер nginx, который бы роутил конект к апи и фронту. Типа Гэтвей. Чтоб не писать локалхост:8081 и локалхост:8080, а по имени обращаться. В том числе разделить обращение по 80 и 443 портам. Я попробовал добавить в корне проекта отдельный каталог gateway и там создать отдельную конфигурацию для АПИ И фронта, естественно поменял и докер-композе файл, но что-то не получилось
Новая структура выглядит так:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
project-root/
│
├── api/
│   ├── docker/
│   │   ├── development/
│   │   │   ├── nginx/
│   │   │   │   ├── conf.d/
│   │   │   │   │   └── default.conf    # Конфигурация для бэкенда
│   │   │   │   ├── Dockerfile
│   ├── public/
│   │   ├── main.py
│   │   └── favicon.ico
│   ├── media/
│   ├── __init__.py
│   ├── Dockerfile
│   ├── requirements.txt
│   └── storage/
│
├── frontend/
│   ├── docker/
│   │   ├── development/
│   │   │   ├── nginx/
│   │   │   │   ├── conf.d/
│   │   │   │   │   └── default.conf    # Конфигурация для фронтенда
│   │   │   │   ├── Dockerfile
│   ├── public/
│   │   ├── css/
│   │   ├── js/
│   │   ├── img/
│   │   ├── app.css
│   │   ├── favicon.ico
│   │   ├── index.html  # Перемещенный шаблон
│   │   └── ...
│   ├── __init__.py
│   └── requirements.txt
│
├── gateway/
│   ├── docker/
│   │   ├── development/
│   │   │   ├── nginx/
│   │   │   │   ├── conf.d/
│   │   │   │   │   ├── api.conf
│   │   │   │   │   └── frontend.conf    # Конфигурация для фронтенда
│   │   │   │   └── Dockerfile
 
├── postgres/
│   ├── data/
│   ├── init.sql
│   └── Dockerfile
│
├── .env
├── docker-compose.yml
├── Makefile
└── README.md

Файл api.conf
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
    listen 8081;
    server_tokens off;
 
    location / {
 
        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-Proto http;
        proxy_set_header X-Forwarded-Host $remote_addr;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://api;
        proxy_redirect off;
    }
}

Файл frontend.conf
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
    listen 8080;
    server_tokens off;
 
    location / {
 
        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-Proto http;
        proxy_set_header X-Forwarded-Host $remote_addr;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://frontend;
        proxy_redirect off;
    }
}

Докерфайл из этого каталога:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
FROM nginx:1.17-alpine
 
COPY ./conf.d /etc/nginx/conf.d
 
WORKDIR /app

И измененный докер-композе файл:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
version: "3.7"
services:
  gateway:
    container_name: cont_gateway
    build:
      context: gateway/docker/development/nginx
    ports:
      - "8080:8080"
      - "8081:8081"
    depends_on:
      - frontend
      - api
 
  frontend:
    container_name: cont_audio_front
    build:
      context: frontend/docker/development/nginx
    volumes:
      - ./frontend:/app
 
  api:
    container_name: cont_api-nginx
    build:
      context: api/docker/development/nginx
    volumes:
      - ./api:/app
    depends_on:
      - api-aio
 
  api-aio:
    container_name: cont_api-aio
    build:
      context: api/
    volumes:
      - ./api:/app

В таком виде все ещё заходит по локалхост, но не хочет ходить по имени сервиса, тоесть по http://frontend и http://api

Может, конечно я в корне не прав и такое не может вообще работать, в смысле идея не правильная, не реализуемая. Но вроде Nginx всего навсего служит для проксирования, тоесть перенаправления, типа роутера можно сделать.
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
23.01.2024, 21:57  [ТС]
Могу добавить, что контейнеры (сервисы) пингуются из моей сети. Адреса подсмотрел с помощью docker inspect
Правда, немного не точно. Если войти внутрь контейнера Гетвей, то пингуется вся докеровская сеть, а если с моего ПК, то пингуется только два адреса. Докеровский гетвей (не мой) и апи. Докеровский гетвей висит на 172.27.0.1. Гетвей висит на 172.27.0.5, апи на 172.27.0.2, а фронтенд 172.27.0.3. И как я говорил, внутри сети все пингуется по имени сервисов, а из моей сети только по адресу, не по имени.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.01.2024, 19:07
так не только можно, так обычно и бывает. nginx действует в роли reverse proxy к разным сервисам.

вы общаетесь со своим сервисом через nginx -> фронтенд, c апи nginx (тот же) -> апи, между собой сервисы могут общаться напрямую.

Добавлено через 12 минут
если нужно обращаться к nginx из хоста по имени, можно добавить запись в /etc/hosts

Добавлено через 5 минут
если вручную добавлять не охота или нужно добавлять много или часто, можно использовать что-то типа https://github.com/mageddo/dns-proxy-server для обращения к контейнерам по имени из хоста, но в проде это будет работать скорее всего через более центральный днс
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
27.01.2024, 10:52  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
если вручную добавлять не охота или нужно добавлять много или часто, можно использовать что-то типа https://github.com/mageddo/dns-proxy-server для обращения к контейнерам по имени из хоста, но в проде это будет работать скорее всего через более центральный днс
Интересный проект, но думаю, что траефик будет лучше. Хотя ни тот, ни другой особо не смотрел. Пока только с NGINX разбираюсь.
Цитата Сообщение от Jabbson Посмотреть сообщение
если нужно обращаться к nginx из хоста по имени, можно добавить запись в /etc/hosts
Мне не столько к контейнеру nginx, сколько к подпроектам: фронту и бэку. Да и идея в том, чтобы делать это без внесения изменений в /etc/hosts
Цитата Сообщение от Jabbson Посмотреть сообщение
так не только можно, так обычно и бывает. nginx действует в роли reverse proxy к разным сервисам.
вы общаетесь со своим сервисом через nginx -> фронтенд, c апи nginx (тот же) -> апи, между собой сервисы могут общаться напрямую.
Да, но почему я по имени не могу зайти на http://frontend и http://api (http://api-aio)? Где у меня ошибка?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
27.01.2024, 18:50
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Интересный проект, но думаю, что траефик будет лучше
"Лучше" определяется необходимостью, нет абстрактного лучше. Это как, если нужно черным квадратом закрыть имя и фамилию на изображении - можно поставить фотошоп, потому что он "лучше", а можно это сделать в Paint

Цитата Сообщение от DyadyaGe Посмотреть сообщение
Мне не столько к контейнеру nginx, сколько к подпроектам
к подпроектам я бы все же обращался черех nginx reverse proxy, этот веб сервер рассчитан на то, чтобы качественно балансировать и в целом обрабатывать большой объем соединений и отлично подходит в качестве точки входа для веб трафика, направляющегося к разным контейнерам.

Цитата Сообщение от DyadyaGe Посмотреть сообщение
Да, но почему я по имени не могу зайти на http://frontend и http://api (http://api-aio)? Где у меня ошибка?
не можете потому эти имена не имеют смысла/значения в сетевом пространстве имен вашего хоста. Разрешение имен в докере работает таким образом, что у докера есть свой внутренний сервер имен, который построен на основе разделения пространства имен. Сервер, доступный контейнерам, находится на хосте в пространстве pid, и прослушивание порта - внутри каждого контейнера в сетевом пространстве имен. Обращение из контейнера идет по адресу 127.0.0.11, а дальше запрос обрабатывается iptables, меняется порт и запрос попадает в этот самый внутренний днс сервер, где логика такая - если запрашиваемое имя - это один из контейнеров - возвращается его IP, а если нет - запрос форвардится дальше.

Заглянем в контейнер (еще ваш не удалил)

Code
1
2
3
4
5
6
7
instance-1:~$ docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED      STATUS      PORTS                                   NAMES
a75866101172   project-root-api       "nginx -g 'daemon of…"   5 days ago   Up 5 days   0.0.0.0:8081->80/tcp, :::8081->80/tcp   api-nginx
instance-1:~$
instance-1:~$ docker exec -it a75866101172 cat /etc/resolv.conf
...
nameserver 127.0.0.11
Найдем pid контейнера:

Code
1
2
instance-1:~$ docker inspect --format "{{.State.Pid}}" a75866101172
82179
смотрим порты в этом пространстве

Code
1
2
3
4
5
instance-1:~$ sudo nsenter -n -t 82179 ss -lnutp
Netid       State        Recv-Q       Send-Q             Local Address:Port              Peer Address:Port      Process                                  
udp         UNCONN       0            0                     127.0.0.11:49810                  0.0.0.0:*          users:(("dockerd",pid=791,fd=54))       
tcp         LISTEN       0            4096                  127.0.0.11:40099                  0.0.0.0:*          users:(("dockerd",pid=791,fd=55))       
tcp         LISTEN       0            511                      0.0.0.0:80                     0.0.0.0:*          users:(("nginx",pid=82218,fd=6),("nginx",pid=82217,fd=6),("nginx",pid=82216,fd=6),("nginx",pid=82215,fd=6),("nginx",pid=82179,fd=6))
посмотрим форвард портов

Code
1
2
3
4
5
6
instance-1:~$ sudo nsenter -n -t 82179 iptables-save -t nat
...
-A DOCKER_OUTPUT -d 127.0.0.11/32 -p tcp -m tcp --dport 53 -j DNAT --to-destination 127.0.0.11:40099
-A DOCKER_OUTPUT -d 127.0.0.11/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.11:49810
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p tcp -m tcp --sport 40099 -j SNAT --to-source :53
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p udp -m udp --sport 49810 -j SNAT --to-source :53
Вот как-то так
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
28.01.2024, 00:50  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
не можете потому эти имена не имеют смысла/значения в сетевом пространстве имен вашего хоста
Глобально или теоретически я проблему понимаю ))) Где-то не прописаны пути, поэтому вопрос для меня несколько иного плана: можно ли вообще так настроить, чтобы ходить по именам типа: http://frontend и http://api И если можно, то как это сделать?
Цитата Сообщение от Jabbson Посмотреть сообщение
где логика такая - если запрашиваемое имя - это один из контейнеров - возвращается его IP, а если нет - запрос форвардится дальше
Опять же, теоретически я это понимаю. Потому в nginx и указываю имена контейнеров, но как в конфигах это настроить, не могу никак понять.
Кстати, пробовал с этим разобраться с помощью логов докера-композ
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
docker-compose logs -f
Attaching to cont_gateway, cont_api-nginx, cont_api-aio, cont_audio_front
cont_gateway | 192.168.144.1 - - [27/Jan/2024:21:27:23 +0000] "GET /api/my_path HTTP/1.1" 404 154 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/2010
0101 Firefox/122.0" "-"
cont_gateway | 192.168.144.1 - - [27/Jan/2024:21:27:32 +0000] "GET / HTTP/1.1" 200 36 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox
/122.0" "-"
cont_gateway | 192.168.144.1 - - [27/Jan/2024:21:27:57 +0000] "GET / HTTP/1.1" 200 503 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefo
x/122.0" "-"
cont_gateway | 192.168.144.1 - - [27/Jan/2024:21:27:57 +0000] "GET /app.css HTTP/1.1" 200 612 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:
122.0) Gecko/20100101 Firefox/122.0" "-"
cont_gateway | 192.168.144.1 - - [27/Jan/2024:21:27:57 +0000] "GET /favicon.ico HTTP/1.1" 200 1178 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64
; rv:122.0) Gecko/20100101 Firefox/122.0" "-"
cont_audio_front | 2024/01/27 21:27:23 [error] 9#9: *1 open() "/app/public/api/my_path" failed (2: No such file or directory), client: 192.168.144.5, server: , reque
st: "GET /api/my_path HTTP/1.0", host: "localhost"
cont_audio_front | 192.168.144.5 - - [27/Jan/2024:21:27:23 +0000] "GET /api/my_path HTTP/1.0" 404 154 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/
20100101 Firefox/122.0" "192.168.144.1"
cont_audio_front | 192.168.144.5 - - [27/Jan/2024:21:27:57 +0000] "GET / HTTP/1.0" 200 503 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" "192.168.144.1"    
cont_audio_front | 192.168.144.5 - - [27/Jan/2024:21:27:57 +0000] "GET /app.css HTTP/1.0" 200 612 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefo
x/122.0" "192.168.144.1"
cont_audio_front | 192.168.144.5 - - [27/Jan/2024:21:27:57 +0000] "GET /favicon.ico HTTP/1.0" 200 1178 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 F
irefox/122.0" "192.168.144.1"
cont_api-nginx | 192.168.144.5 - - [27/Jan/2024:21:27:32 +0000] "GET / HTTP/1.0" 200 36 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" "192.168.144.1"       
cont_gateway | 192.168.144.1 - - [27/Jan/2024:21:48:40 +0000] "GET / HTTP/1.1" 200 36 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" "-"
cont_api-nginx | 192.168.144.5 - - [27/Jan/2024:21:48:40 +0000] "GET / HTTP/1.0" 200 36 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" "192.168.144.1"       
cont_api-nginx | 192.168.144.5 - - [27/Jan/2024:21:49:15 +0000] "GET / HTTP/1.0" 200 36 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" "192.168.144.1"
cont_gateway | 192.168.144.1 - - [27/Jan/2024:21:49:15 +0000] "GET / HTTP/1.1" 200 36 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" "-"
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
28.01.2024, 01:24
Цитата Сообщение от DyadyaGe Посмотреть сообщение
можно ли вообще так настроить, чтобы ходить по именам типа: http://frontend и http://api И если можно, то как это сделать?
сделать можно все, вопрос тут еще в том, стоит ли.

Если стоит, то в Вашем случае проблем две -

1) замена адресов на имена, значит где-то нужно определить соответствие, как я упоминал уже выше - это можно сделать например в /etc/hosts

2) замена портов, тут все сложнее, можно попробовать извратиться с iptables, например

в /etc/hosts маппинг
frontend -> 127.0.0.100
api -> 127.0.0.200

в iptables dnat+dpat
127.0.0.100:80 --> 172.27.0.3:8080
127.0.0.200:80 --> 172.27.0.2:8081

если хотите - разбирайтесь как

Я бы этой бородой не занимался и ко всему обращался через один nginx reverse proxy

в /etc/hosts:
frontend --> 172.27.0.5

а дальше маршрутизация средствами самого прокси - http://server - к переду, http://server/api - к заду.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2024, 01:24
Помогаю со студенческими работами здесь

Сборка фронта и бэка
Доброго времени суток, у меня есть проект с фронтом и бэком, фронт написан на чистом html+css+js, а бэк на NodeJs express. Вопрос состоит в...

Контейнеры для изображений
Здравствуйте! Интересует вопрос о помещении изображений в контейнер и добавление полос прокруток для листов. К примеру как в adobe...

Реализация алгоритма Кируса-Бэка
Реализую алгоритм Кируса-Бэка.Необходимо экранной плоскостью обрезать отрезок. Вот код. using System; using...

Внешние контейнеры для HDD
Здравствуйте. Стоит ли использовать данные контейнеры? Где-то читал, что они способны портить HDD, и длительное использование этих...

Cвязка Nginx-Nginx как ограничить доступ к бэкэнду?
Есть связка на двух разных серверах с установленным Nginx. Я хочу сделать чтобы доступ к бэкэнду был возможен только с фронтенда. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru