Форум программистов, компьютерный форум, киберфорум
Nginx
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
5 / 4 / 2
Регистрация: 12.07.2023
Сообщений: 69

502 Bad Gateway Nginx и ASP

14.05.2024, 23:04. Показов 988. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, пытаюсь запустить ASP NET + Nginx в докере
В Dockerfile открыл порты (тут запускается Kerstel)
Code
1
2
EXPOSE 8080
EXPOSE 8081
Docker compose настроен следующим образом
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
services:
  yggdrasilapinodes:
    container_name: yggdrasilapinodes
    image: ${DOCKER_REGISTRY-}yggdrasilapinodes
    build:
      context: .
      dockerfile: YggdrasilApiNodes/Dockerfile
    networks:
      - nginx_network
  nginx:
    container_name: nginx
    build:
      context: Nginx
      dockerfile: Dockerfile
    ports:
      - "80:80"
      - "443:443"
    networks:
      - nginx_network
 
networks:
  nginx_network:
    external: false
    name: nginx_network
В docker compose override установлены порты
Code
1
2
3
ports:
      - "8080:8080"
      - "8081:8081"
Nginx.conf настроил так
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
events { }
http {
  map $http_connection $connection_upgrade {
    "~*Upgrade" $http_connection;
    default keep-alive;
  }
 
  server {
    listen        80;
    server_name   localhost;
    location / {
        proxy_pass         http://127.0.0.1:8080/;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection $connection_upgrade;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
  }
}
И при конекте получаю 502 Bad Gateway. Если конектиться через https://127.0.0.1:8081/swagger/index.html то все ок
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2024, 23:04
Ответы с готовыми решениями:

Nginx + Apache2 выдают 502 Bad Gateway
Всем привет. Такая ситуация. Есть два сайта: site.ru и admin.site.ru Повешаны на один ip site.ru написан на yii2 ...

permission denied - bad gateway
Проблема в том, что нет прав в стиле sudo или между ip:domain ? Логи 2020/09/05 10:04:48 21583#21583: *16 connect() to...

Nginx 502/504
Здравствуйте. Такая проблема: Имеются сайты на веб обвязке nginx+php-fpm Так вот, первое время, после запуска обвязки, сайты...

8
221 / 133 / 38
Регистрация: 25.07.2021
Сообщений: 533
15.05.2024, 09:11
а если именно по http://127.0.0.1:8080/ (как у вас в конфиге nginx сказано) тоже все ок?
1
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,902
15.05.2024, 09:36
Лучший ответ Сообщение было отмечено MozzarellaLover как решение

Решение

Цитата Сообщение от MozzarellaLover Посмотреть сообщение
ports:
- "8080:8080"
- "8081:8081"
Зачем?

Цитата Сообщение от MozzarellaLover Посмотреть сообщение
Что тут, по-твоему, конфигурируется?

Во-первых. Конфигурируется тут то, что контейнер с nginx должен сам к себе на порт 8080 ломиться. И конечно же ты получаешь 502. А надо указывать не IP, а имя хоста контейнера с приложением: proxy_pass [url]http://yggdrasilapinodes:8080/;[/url].

Во-вторых, твоё веб-приложение должно прослушивать указанный порт. И делается это не в Dockerfile. EXPOSE ничего в этом вопросе не решает. Оно чисто как комментарий выступает, чтобы понятно было, с какими портами работам ведётся.

В-третьих, что это такое:
Цитата Сообщение от MozzarellaLover Посмотреть сообщение
build:
context: Nginx
dockerfile: Dockerfile
??? Это не нужно. Просто передай конфиг внутрь контейнера. Не надо новый образ собирать.
1
5 / 4 / 2
Регистрация: 12.07.2023
Сообщений: 69
16.05.2024, 01:20  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Сообщение от MozzarellaLover
build:
У меня nginx.conf расположен в папке Nginx в которой также находится Dockerfile. Не очень понял почему не надо новый образ собирать ? Разве не лучше вынести nginx в отдельный контейнер ?
Если я понял вас правильно вы предлагаете в Dockerfile asp проекта добавить и использоваться как 1 контейнер. Добавить это туда:
Code
1
2
3
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY proxy.conf /etc/nginx/proxy.conf
Цитата Сообщение от Usaga Посмотреть сообщение
ports:
- "8080:8080"
- "8081:8081"
Без этого проект просто не собирается: Can not find any host ports in the container 'a29de6efbe73'.

Цитата Сообщение от Usaga Посмотреть сообщение
Во-первых. Конфигурируется тут то, что контейнер с nginx должен сам к себе на порт 8080 ломиться. И конечно же ты получаешь 502. А надо указывать не IP, а имя хоста контейнера с приложением: proxy_pass http://yggdrasilapinodes:8080/;.
Идея была такая что kerstel доступен только по localhost и nginx передает все запросы на него. Но ваше сообщение навело меня на мысль: Добавить depends_on в 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
services:
  yggdrasilapinodes:
    container_name: yggdrasilapinodes
    image: ${DOCKER_REGISTRY-}yggdrasilapinodes
    build:
      context: .
      dockerfile: YggdrasilApiNodes/Dockerfile
    networks:
      - nginx_network
    restart: always
  nginx:
    container_name: nginx
    build:
      context: YggdrasilApiNodes/Nginx
      dockerfile: Dockerfile
    ports:
      - "80:80"
      - "443:443"
    networks:
      - nginx_network
    depends_on:
      - yggdrasilapinodes
networks:
  nginx_network:
    external: false
    name: nginx_network
и исправить сам nginx.conf
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
events { }
http {
  map $http_connection $connection_upgrade {
    "~*Upgrade" $http_connection;
    default keep-alive;
  }
 
  server {
    listen        80;
    server_name   localhost;
    location /swagger/ {
        proxy_pass         http://yggdrasilapinodes:8080/swagger/;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection $connection_upgrade;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
  }
}
и все заработало
P.S сборка для docker compose из visual studio перестает работать если мы добавляем depends_on так что приходится собираться через консоль. Видимо как то dcproj подправить чтоб запускалось но пока не нашел ничего
0
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,902
16.05.2024, 04:23
Цитата Сообщение от MozzarellaLover Посмотреть сообщение
У меня nginx.conf расположен в папке Nginx в которой также находится Dockerfile. Не очень понял почему не надо новый образ собирать ? Разве не лучше вынести nginx в отдельный контейнер ?
Ты не немного не понял мой посыл. Отдельный контейнер под реверс-прокси это как раз-таки правильно. Не совсем правильно собирать свой образ nginx чисто, чтобы туда конфиг зашить. Точнее, тебе никто не запретит так делать, если ты считаешь, что так надо. Но обычно используют обычный образ nginx, в который просто монтируют файл с конфигом. Поэтому и я спросил зачем пункт "build" у сервиса nginx.

Цитата Сообщение от MozzarellaLover Посмотреть сообщение
Если я понял вас правильно вы предлагаете в Dockerfile asp проекта добавить и использоваться как 1 контейнер. Добавить это туда:
Нет)

Цитата Сообщение от MozzarellaLover Посмотреть сообщение
Без этого проект просто не собирается: Can not find any host ports in the container 'a29de6efbe73'.
А вот этого точно не может быть)

Цитата Сообщение от MozzarellaLover Посмотреть сообщение
Идея была такая что kerstel доступен только по localhost
Не по localhost, а внутри bridge network докера.
Цитата Сообщение от MozzarellaLover Посмотреть сообщение
Добавить depends_on в nginx чтобы получилось так
Не обязательно, но в целом правильно.

Цитата Сообщение от MozzarellaLover Посмотреть сообщение
nginx_network:
external: false
name: nginx_network
Вот тут последние две строчки тоже лишние. Такая сеть по умолчанию не является внешней и её имя по дефолту совпадает с тем, что в конфиге указано.

Цитата Сообщение от MozzarellaLover Посмотреть сообщение
ports:
- "80:80"
- "443:443"
Кстати, в конфиге nginx не видно поддержки HTTPS. Поэтому порт 443 выставлять не обязательно.
0
5 / 4 / 2
Регистрация: 12.07.2023
Сообщений: 69
17.05.2024, 15:51  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
А вот этого точно не может быть)
Вот чуть подробнее /Applications/Visual Studio.app/Contents/MonoBundle/AddIns/MonoDevelop.Docker/MSbuild/Sdks/Microsoft.Docker.Sdk/build/Microsoft.VisualStudio.Docker.Compose.ta rgets(5,5): Error DT1001: validating /Users/user/Projects/YggdrasilApiNodes/docker-compose.yml: services.yggdrasilapinodes.ports must be a list (DT1001) (docker-compose). Без явно указанных портов не собирается ни через консоль ни через visual studio.

Цитата Сообщение от Usaga Посмотреть сообщение
Кстати, в конфиге nginx не видно поддержки HTTPS. Поэтому порт 443 выставлять не обязательно.
Ну на тот момент ее я еще не добавил. Конечный вариант так выглядит
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
events { }
http {
  map $http_connection $connection_upgrade {
    "~*Upgrade" $http_connection;
    default keep-alive;
  }
 
  server {
    listen   80 default_server;
    return   444;
  }
 
  server {
    listen        80;
    server_name   localhost;
 
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
 
 
    location /swagger/ {
        proxy_pass         http://yggdrasilapinodes:8080/swagger/;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection $connection_upgrade;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
 
    location / {
        proxy_pass         http://yggdrasilapinodes:8080/swagger/;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection $connection_upgrade;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
  }
 
  include        /etc/nginx/proxy.conf;
  limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
  server_tokens  off;
 
  sendfile on;
  keepalive_timeout   29;
  client_body_timeout 10;
  client_header_timeout 10;
  send_timeout 10;
 
  server {
      listen                    443 ssl;
      http2                     On;
      server_name               localhost;
      ssl_certificate           /etc/ssl/certs/ca.pem;
      ssl_certificate_key       /etc/ssl/certs/ca.key;
      ssl_session_timeout       1d;
      ssl_protocols             TLSv1.2 TLSv1.3;
      ssl_prefer_server_ciphers off;
      ssl_ciphers               ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
      ssl_session_cache         shared:SSL:10m;
      ssl_session_tickets       off;
      ssl_stapling              off;
 
      add_header X-Frame-Options SAMEORIGIN;
      add_header X-Content-Type-Options nosniff;
 
      location /swagger/ {
          proxy_pass https://yggdrasilapinodes:8081/swagger/;
          limit_req  zone=one burst=10 nodelay;
      }
 
      location / {
          proxy_pass https://yggdrasilapinodes:8081/swagger/;
          limit_req  zone=one burst=10 nodelay;
      }
    }
}
Цитата Сообщение от Usaga Посмотреть сообщение
Но обычно используют обычный образ nginx, в который просто монтируют файл с конфигом. Поэтому и я спросил зачем пункт "build" у сервиса nginx.
Теперь понял о чем речь, лично мне как то комфортнее собирать образ а не монтировать, возможно не совсем правильно но вот такой я.
0
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,902
19.05.2024, 06:55
Цитата Сообщение от MozzarellaLover Посмотреть сообщение
Вот чуть подробнее /Applications/Visual Studio.app/Contents/MonoBundle/AddIns/MonoDevelop.Docker/MSbuild/Sdks/Microsoft.Docker.Sdk/build/Microsoft.VisualStudio.Docker.Compose.ta rgets(5,5): Error DT1001: validating /Users/user/Projects/YggdrasilApiNodes/docker-compose.yml: services.yggdrasilapinodes.ports must be a list (DT1001) (docker-compose). Без явно указанных портов не собирается ни через консоль ни через visual studio.
Тут сказано, что список портов не правильно указан (ошибка синтаксиса конфига). Тут не говорится, что этот список обязателен.

Цитата Сообщение от MozzarellaLover Посмотреть сообщение
Теперь понял о чем речь, лично мне как то комфортнее собирать образ а не монтировать, возможно не совсем правильно но вот такой я.
Это не "неправильно". Избыточно. Но если ты понимаешь что делаешь и тебе так удобнее, то всё нормально.
0
5 / 4 / 2
Регистрация: 12.07.2023
Сообщений: 69
21.05.2024, 22:18  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Тут сказано, что список портов не правильно указан (ошибка синтаксиса конфига). Тут не говорится, что этот список обязателен.
Если комментируем порты в docker-compose получаем ошибку сборки как и писал в начале (если собираемся через visual studio):

Если собираться через консоль то все собирается но портов нет.
Если просто оставить ports то получаем ошибку синтаксиса: services.yggdrasilapinodes.ports must be a list (DT1001)
Просто не понимаю почему бы их явно не указать ? особенно если они указаны в docker-compose.override, а для продакшана мы все равно будет использовать docker-compose.production где их мы не укажем ?
0
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,902
22.05.2024, 04:59
MozzarellaLover, в общем, это приколюхи студии какие-то)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2024, 04:59
Помогаю со студенческими работами здесь

502 Bad Gateway nginx
что делать с этим, не понимаю, ну что я за проклятый человек, как это исправить

почему 502 Bad Gateway nginx
<?php error_reporting(E_ALL & ~E_NOTICE); // Подключаем реализацию класса require_once("class.user.php"); //...

Docker: 502 bad gateway nginx
Всем привет! С Docker только недавно работаю, всё вроде бы работало нормально, но в один прекрасный день браузер вывалил мне 502 ошибку:...

Ошибка 502 Bad Gateway nginx
Доброго времени суток! Пожалуйста, помогите разобраться в ситуации. Есть приложение, которое по запросу пользователя открывает в новом...

502 Bad Gateway nginx/1.4.6 во всех браузерах
Здравствуйте. На протяжении двух недель на всех сайтах и во всех браузерах ошибка, в низу написано 502 Bad Gateway nginx/1.4.6 ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru