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
ога, поэтому с него на сворм съезжаю)
Yuriy
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/
Yuriy
в других примерах в этом параметре указывали IP
proxy_pass 127.0.0.1:8080/;
Artem
а стоп
Artem
не заметил у тебя контейнер нейм
Artem
php7
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 блочит исходящие запросы?
Yuriy
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
значит не он
Artem
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