Artem
давно уже работает
Artem
и даже в кубернетес завезли, хотя раньше не было
Artem
у меня в nginx который на фронте вот так получает и передает в контейнеры реальный адрес.
Artem
set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For;
Yuriy
а можешь полным конфигом поделится? , или большим фрагментом, а то невсем понимаю кода это нужно вставлять
Yuriy
для определения реальных IP нужно утанавливать Модуль ngx_http_realip_module?
Artem
location / { proxy_pass http://container-name/; client_body_in_single_buffer on; client_body_buffer_size 32K; client_max_body_size 1m; client_body_in_file_only off; set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For; real_ip_recursive on; proxy_set_header Host $host:$server_port; 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_connect_timeout 3s; proxy_send_timeout 90s; proxy_read_timeout 90s; send_timeout 90; }
Artem
работает с офф образом nginx из коробки
Yuriy
замечательно, спасибо, сейчас попробую
Artem
?
Artem
Раньше там не передавался адрес и только с 1.5.1 в бета фиче появился
Artem
А вот такая, что в докере это работало, а те же контейнеры в кубере не получали адреса через балансировщик
Artem
ога, поэтому с него на сворм съезжаю)
Artem
у тебя компоуз, сворм или просто контейнеры?
Yuriy
docker compose
Artem
имя сервиса
Artem
бэкэнда
Yuriy
php или nginx ?
Artem
docker-compose ps и там имена сервисов
Artem
только без прификсов bla_ _1 если они есть
Arsen
расскажите плз в двух словах нубу, почему так?)
Arsen
Всё, доуер лучший, куб гавно)
Arsen
ога, поэтому с него на сворм съезжаю)
Artem
да этой так, сарказмируем просто)
Yuriy
в других примера в этом параметре укзаывали IP proxy_pass 127.0.0.1:8080/; из имен без "*_1" у меня только php7 указал proxy_pass php7; но хост вовсе не поднялся
Artem
Все оркестраторы важны, все оркестраторы нужны 😊
Artem
кинь начало куска из компоуза с этим сервисом
Artem
с описанием контейнера php этого
Yuriy
# Версия docker-compose version: '2' # Список наших сервисов (контейнеров) services: nginx: # используем последний стабильный образ nginx image: nginx:latest # маршрутизируем порты ports: - "80:80" - "443:443" # монтируем директории, слева директории на основной машине, справа - куда они монтируются в контейнере volumes: - ./config/nginx.conf/:/etc/nginx/nginx.conf - ./config/nginx_hosts/:/etc/nginx/conf.d - ./www:/var/www - ./logs/nginx:/var/log/nginx # nginx должен общаться с php контейнером links: - php php: # у нас свой образ для PHP, указываем путь к нему и говорим что его надо собрать build: ./config/php container_name: php7 # этот образ будет общаться с mysql links: - mysql # монтируем директорию с проектами volumes: - ./www:/var/www
Artem
1. links уже вроде как depricated - юзай network
Artem
2. proxy_pass http://php/
Arsen
да этой так, сарказмируем просто)
черт, как сложно в 2017 не запутаться в слоях иронии
Yuriy
2. proxy_pass http://php/
invalid URL prefix in /etc/nginx/conf.d/hello-dev.conf:36
Yuriy
в других примерах в этом параметре указывали IP proxy_pass 127.0.0.1:8080/;
Artem
а стоп
Artem
не заметил у тебя контейнер нейм
Artem
php7
Artem
в других примерах в этом параметре указывали IP proxy_pass 127.0.0.1:8080/;
зачем делать проброс на внешний порт хоста, если контейнеры прекрасно общаются между собой по внутренней сети по именам
Yuriy
ну это замечательно, я же еще зеленый в даной теме
Artem
лучше смотреть офф доку, чтобы не делать "вредные" примеры
Artem
там тоже немало примеров
Yuriy
скажи пожалуйста после изменений я останавливаю контейнер и повторно запускаю, может нужно их полностью пересобирать?
Artem
если в nginx изменения, то судя по конфигу твоему достаточно будет docker-compose restart nginx
Bogdan
Приветствую! Сделал backend сервер с подключением к бд на отдельном хосте. Поднимаю на локальном компе - все окей, подключение к БД есть. Поднимаю на удаленном сервере - к БД не подключается. В чем может быть проблема? Благодарю за помощь
Bogdan
А, естественно все в контейнере поднимается
Bogdan
Docker version 17.06.0-ce, build 02c1d87 на сервере
Bogdan
Docker version 17.06.0-ce, build 02c1d87 локальный на маке
Bogdan
На сервере для работы с ufw поправлен конфиг докера /etc/default/docker: DOCKER_OPTS="--dns 8.8.8.8 —dns 8.8.4.4 —iptables=false" /etc/default/ufw DEFAULT_INPUT_POLICY="DROP" DEFAULT_OUTPUT_POLICY="ACCEPT" DEFAULT_FORWARD_POLICY="ACCEPT"
Bogdan
ни у кого нет никаких мыслей?(
Bogdan
это в контейнере или в хосте?
Bogdan
tcpdump -nni 5432 3306 на хосте пишет tcpdump: Invalid adapter index
kiosaku
-i <interface>
Bogdan
а, тьфу
Bogdan
sudo tcpdump -nni eth0 5432 3306 - tcpdump: syntax error
Bogdan
та что за дела
kiosaku
tcpdump -i eth0 port 5432 or port 3306
Bogdan
на хосте вижу, что идут попытки к коннекту
Bogdan
16:49:35.677747 IP 172.23.0.2.57098 > 104.131.135.205.postgresql: Flags [S], seq 567206051, win 29200, options [mss 1460,sackOK,TS val 78653745 ecr 0,nop,wscale 7], length 0 16:49:36.694017 IP 172.23.0.2.57098 > 104.131.135.205.postgresql: Flags [S], seq 567206051, win 29200, options [mss 1460,sackOK,TS val 78654000 ecr 0,nop,wscale 7], length 0 16:49:38.709898 IP 172.23.0.2.57098 > 104.131.135.205.postgresql: Flags [S], seq 567206051, win 29200, options [mss 1460,sackOK,TS val 78654504 ecr 0,nop,wscale 7], length 0 16:49:42.901995 IP 172.23.0.2.57098 > 104.131.135.205.postgresql: Flags [S], seq 567206051, win 29200, options [mss 1460,sackOK,TS val 78655552 ecr 0,nop,wscale 7], length 0 16:49:51.094301 IP 172.23.0.2.57098 > 104.131.135.205.postgresql: Flags [S], seq 567206051, win 29200, options [mss 1460,sackOK,TS val 78657600 ecr 0,nop,wscale 7], length 0 16:50:07.222061 IP 172.23.0.2.57098 > 104.131.135.205.postgresql: Flags [S], seq 567206051, win 29200, options [mss 1460,sackOK,TS val 78661632 ecr 0,nop,wscale 7], length 0
Bogdan
неужто ufw блочит исходящие запросы?
Artem
нет, помимо той которую я скинул, только server_name с fqdn по которому попадать на контейнеры
Yuriy
я перебрал уже все варианты, но ни в одном из них хост просто не запускается
Bogdan
такой конфиг ufw
Bogdan
Status: active To Action From — —---- —— 22 ALLOW Anywhere Nginx Full ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
Bogdan
выключив его ничего не поменялось
Bogdan
значит не он
Yuriy
2017/07/28 13:52:28 [error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: hello.dev, request: "GET / HTTP/1.1", upstream: "http://172.19.0.4:80/", host: "hello.dev"
Artem
nginx должен подниматься последним, после того как поднялись все сервисы которые прописаны у него в конфиге
Yuriy
а на самой странице получаю 502 Bad Gateway nginx/1.13.3
Artem
т.к. если хоть один из них не будет доступен он упадет при поднятии
Artem
зачем хардкодить в апстрим айпишник
Artem
там должно быть имя сервиса, т.к. адреса могут меняться
Yuriy
возможно, но если я исключу все заморочки для определении реального IP, то в том же порядке docker-composee.yml все будет работать, это факт
Artem
контейнеры сами могут разрезолвить все айпи
Yuriy
да мне не принципиально имя пусть будет имя, но в лог файле мне нужно видеть реальный IP пользователя запросившего страницу эти варианты дают такой же результат proxy_pass http://php; proxy_pass http://php7; proxy_pass http://php:9000;
kiosaku
ну выставляй какой-нить заголовок и пиши на бэке в файл значение этого заголовка
kiosaku
proxy_set_header X-Real-IP $remote_addr
kiosaku
а в log_format: $http_x_real_ip