
Михаил
20.11.2018
04:50:02
Ааааааа

Anton
20.11.2018
06:26:52
Добрый день, может кто поможет.
Есть дата контейнер с nginx в котором билдится фронт
В nginx.conf прописал proxy_pass http://ip:port;
Есть несколько микросервисов с которыми фронт взаимодействует, которые открыты также через nginx
Проблема в том что nginx на фронте выдает 400 или 500
p.s.
все контейнеры добавлены в один network
уточню, все контейнеры доступны напрямую через localhost:port, но не через дата контейнер

Yuriy
20.11.2018
06:30:50
докерфайлы и конфиг nginx в студию, телепаты в отпуске

Google


Anton
20.11.2018
06:31:53
user nginx;
worker_processes auto;
pid /run/nginx.pid;
# Must be presents here, not passed through command line
daemon off;
events {
worker_connections 768;
# multi_accept on;
}
error_log /dev/stderr warn;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
client_max_body_size 128m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
proxy_buffering off;
gzip off;
gzip_disable "msie6";
upstream front {
server frontfinal_nginx_1:19999;
}
upstream core {
server corefinal_app_1:9999;
}
upstream media {
server media_app_1:29999;
}
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;
# Also you can use this variable: `%APP_BASE_URL%`
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
charset utf-8;
access_log /dev/stdout combined;
index index.html index.htm index.txt readme.txt readme.md;
root %ROOT_DIR%;
include errorpages.conf;
location ~ /\.(ht|git) {
deny all;
}
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|less)$ {
expires off;
sendfile off;
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.html?$query_string;
proxy_pass http://front;
}
}
server {
# server_name api.freshplan.ru;
location /api {
proxy_pass http://core;
}
}
server {
# server_name media.freshplan.ru;
location /media {
proxy_pass http://media;
}
}
# custom
}
докерфайлов слишком много, да и запускаю через докеркомпоз
nginx:
build:
context: .
dockerfile: Dockerfile
restart: always
working_dir: /usr/share/nginx/html
environment:
ROOT_DIR: '/usr/share/nginx/html'
volumes:
- ./src:/app/dist:ro
# - $PWD/src:/app/dist:ro
ports: ['19999:80']
networks:
- frontend-network
- web
labels:
- "traefik.enable=true"
- "traefik.backend=front-be"
- "traefik.frontend.rule=Host:front.localhost"
это докеркомпоз фронта, только сам процесс


Yuriy
20.11.2018
06:34:52
что то мне подсказывает что вот это
upstream front {
server frontfinal_nginx_1:19999;
}
upstream core {
server corefinal_app_1:9999;
}
upstream media {
server media_app_1:29999;
}
лишнее
в location сразу проще прокинуть
или у вас кучка nginx'ов?

Anton
20.11.2018
06:35:35
у меня их куча
я несовсем уверен что правильно делаю
upstream можно убрать, но это не поменяет ситуацию

Yuriy
20.11.2018
06:36:40
у вас labels так то для traefik имеются

Google

Anton
20.11.2018
06:37:10
labels да есть, я пытаюсь разными путями решить проблему
через traefik тоже пока не выходит

Yuriy
20.11.2018
06:37:37
выкинуть секцию что я написал выше, прописать вот такого вида
location / {
proxy_pass http://wildfly:8080;
add_header Access-Control-Allow-Origin *;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location /websocket {
proxy_pass http://wildfly:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /glonass {
proxy_pass http://nodered:1880;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
кусок конфига с боевого контейнера
ну и прописывать это все не в nginx.conf а в vhost.conf
или в default.conf

Anton
20.11.2018
06:40:15
один вопрос, что мне прописывать в proxy_pass?
имя контейнера ? У меня ведь везде nginx container, но выводит в списке уже по имени директории
погуглив нашел что надо использовать внутренний ip контейнера

Yuriy
20.11.2018
06:40:40
да имя как в docker-compose.yml

Anton
20.11.2018
06:41:00

Yuriy
20.11.2018
06:41:28
compose файл в студию

Anton
20.11.2018
06:42:14

Дмитрий
20.11.2018
06:42:22
Compose же вроде обеспечивает сетевую связанность

Yuriy
20.11.2018
06:42:44
т.е запускаете из разных композ файлов?

Anton
20.11.2018
06:42:55
да
они связаны network

Yuriy
20.11.2018
06:43:18
ну как минимум имена сервисам разные дать

Anton
20.11.2018
06:44:14

Yuriy
20.11.2018
06:44:59
доступны они через dns будут все равно по имени которое в композ файле прописано

Google

Yuriy
20.11.2018
06:45:23
docker ps что выдает?

Anton
20.11.2018
06:45:58

Yuriy
20.11.2018
06:46:12

Anton
20.11.2018
06:46:17

Yuriy
20.11.2018
06:47:16
в вашем случае traefik будет лучше

Anton
20.11.2018
06:47:34
говорят он под прод не готов еще(

Yuriy
20.11.2018
06:47:35
т.к он по labels'ам умеет
общая схема такова Кучка Контейнеров—->Traefik—-»Nginx который смотрит в инет
в таком случае на nginx'е прописать один локешн на traefik
хотя traefik вполне себе годная прокся

Anton
20.11.2018
06:50:07
вроде понял но переспрошу,
дата контейнер с портом 80,443
прокси ведет на порт 19999 traefik
тот уже переводит на те контейнеры которые нужно?

Yuriy
20.11.2018
06:50:34
да вам одного traefik хватит на все контейнеры

Anton
20.11.2018
06:53:15
у меня сейчас в label у сервиса прописано - - "traefik.frontend.rule=Host:core.localhost"
а мне нужно чтобы переходило c /api
Мне тут прописать localhost:port/api верно?

Aleksey
20.11.2018
06:55:15

Yuriy
20.11.2018
07:37:53

Дмитрий
20.11.2018
07:56:45

Anton
20.11.2018
08:02:48
все же не могу настроить нормально traefik
мои шаги
1) запустил дата контейнер и открыл 80/443
2) изменил nginx.conf
location /
location /api proxy_pass http://nginx:19999;
location /media proxy_pass http://nginx:19999;
3) запустил traefik на 19999 порту
4) добавил label сервисам
5) запустил сервисы
где ошибка может быть?
debug = true
checkNewVersion = true
logLevel = "ERROR"
defaultEntryPoints = ["http"]
[entryPoints]
[entryPoints.http]
address = ":19999"
[retry]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "localhost"
watch = true
exposedbydefault = false
это конфиг traefik

Maxim
20.11.2018
14:29:25

Google

Anton
20.11.2018
14:45:43
У меня развернут фронт статично в nginx контейнере, он запрашивает данные с Апи и с медиа сервиса. Оба сервиса развёрнуты отдельно со своими докеркомпоз файлами.
Моя задача чтобы фронт мог получить эти данные

Maxim
20.11.2018
14:57:33

Anton
20.11.2018
16:27:46

Maxim
20.11.2018
16:28:09

Anton
20.11.2018
16:28:18
Мне выше подсказали не открывать публично traefik порты

Maxim
20.11.2018
16:28:21
зачем он тебе тогда?

Anton
20.11.2018
16:28:41

Maxim
20.11.2018
16:28:58
зачем он тебе в этой схеме?

Anton
20.11.2018
16:29:33

Maxim
20.11.2018
16:29:55

Anton
20.11.2018
16:30:13
У меня несколько микросервисов, в которых свой nginx

Maxim
20.11.2018
16:30:15
смысл в traefik если сам nginx может решить что куда направлять

ptchol
20.11.2018
16:30:52

Maxim
20.11.2018
16:32:33
Вероятно во встроенной интеграции с sd
ок, давай еще раз с начала. Расскажи какую задачу тебе нужно решить?
1) есть nginx с каким то приложением. Каким? lua? php?
2) nginx направляет запросы к traefik для обращения к двум сервисам которые стоят за traefik. Верно?
3) ...

Anton
20.11.2018
16:34:10
Это только 2 сервиса, а у меня их 7