<div dir="ltr">Спасибо, Федор! Разобрался. Дело в том, что трафик на nginx заводится через iptables REDIRECT. Поэтому какой бы адрес ни находился в качестве destination IP, из-за редиректа он всегда становится первым адресом интерфейса / адресом первого интерфейсаю Спасибо еще раз!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">чт, 28 февр. 2019 г. в 22:00, Fedor Dikarev <<a href="mailto:fe@hamilton.rinet.ru">fe@hamilton.rinet.ru</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">А это точно тестируемый конфиг приведен? Может там еще что-то есть?<br>
<br>
Тут получается что nginx проксирует сам на себя, и я даже не поленился <br>
это попробовать и получил ожидаемое:<br>
> # cat localhost.conf <br>
> server {<br>
> listen 80;<br>
> <br>
> access_log /var/log/nginx/local-access.log;<br>
> location / { return 200 "$server_addr\n"; }<br>
> location /one {<br>
> proxy_set_header X-Server-IP $server_addr;<br>
> proxy_pass $scheme://$server_addr;<br>
> }<br>
> }<br>
<br>
> # grep -c /one /var/log/nginx/local-access.log ; curl <a href="http://192.168.255.5/one" rel="noreferrer" target="_blank">http://192.168.255.5/one</a> ; grep -c /one /var/log/nginx/local-access.log<br>
> 909<br>
> <html><br>
> <head><title>502 Bad Gateway</title></head><br>
> <body><br>
> <center><h1>502 Bad Gateway</h1></center><br>
> <hr><center>nginx/1.15.8</center><br>
> </body><br>
> </html><br>
> 1813<br>
<br>
> grep -c /one /var/log/nginx/local-access.log ; curl <a href="http://192.168.255.5/one" rel="noreferrer" target="_blank">http://192.168.255.5/one</a> ; grep -c /one /var/log/nginx/local-access.log<br>
> 1813<br>
> <html><br>
> <head><title>502 Bad Gateway</title></head><br>
> <body><br>
> <center><h1>502 Bad Gateway</h1></center><br>
> <hr><center>nginx/1.15.8</center><br>
> </body><br>
> </html><br>
> 2820<br>
<br>
<br>
28.02.19 21:35, Igor Savenko пишет:<br>
> Хм. Интересно получается.<br>
> Интерфейсы на хосте (поскольку это, видимо, KVM guest, то все они, <br>
> наверное, выставлены в один бридж, но это не имеет отношения к делу):<br>
> [root@blissstagingserver1 imunify360-webshield]# ip -o -4 ad | grep eth<br>
> 2: eth0 inet <a href="http://10.0.0.143/26" rel="noreferrer" target="_blank">10.0.0.143/26</a> <<a href="http://10.0.0.143/26" rel="noreferrer" target="_blank">http://10.0.0.143/26</a>> brd 10.0.0.191 <br>
> scope global eth0\ valid_lft forever preferred_lft forever<br>
> 3: eth1 inet <a href="http://10.0.0.146/26" rel="noreferrer" target="_blank">10.0.0.146/26</a> <<a href="http://10.0.0.146/26" rel="noreferrer" target="_blank">http://10.0.0.146/26</a>> brd 10.0.0.191 <br>
> scope global eth1\ valid_lft forever preferred_lft forever<br>
> 4: eth2 inet <a href="http://10.0.0.147/26" rel="noreferrer" target="_blank">10.0.0.147/26</a> <<a href="http://10.0.0.147/26" rel="noreferrer" target="_blank">http://10.0.0.147/26</a>> brd 10.0.0.191 <br>
> scope global eth2\ valid_lft forever preferred_lft forever<br>
> <br>
> server {<br>
> listen *:80;<br>
> location / {<br>
> proxy_set_header X-Server-IP $server_addr;<br>
> proxy_pass $scheme://$server_addr;<br>
> }<br>
> }<br>
> <br>
> Бекэндом выступает питоновский http.server, который просто выводит в <br>
> консоль заголовки Host и X-Server-IP<br>
> <br>
> $ curl -L -v <a href="http://10.0.0.146" rel="noreferrer" target="_blank">http://10.0.0.146</a><br>
> * Rebuilt URL to: <a href="http://10.0.0.146/" rel="noreferrer" target="_blank">http://10.0.0.146/</a><br>
> * Trying 10.0.0.146...<br>
> * TCP_NODELAY set<br>
> * Connected to 10.0.0.146 (10.0.0.146) port 80 (#0)<br>
> > GET / HTTP/1.1<br>
> > Host: 10.0.0.146<br>
> > User-Agent: curl/7.52.1<br>
> > Accept: */*<br>
> ><br>
> < HTTP/1.1 200 OK<br>
> <br>
> На это питоновский сервер пишет<br>
> Host: 10.0.0.146, IP: 10.0.0.143<br>
> <br>
> То есть $server_addr -- 10.0.0.143, a не 146, как ожидалось...<br>
> <br>
> То есть в $server_add<br>
> <br>
> чт, 28 февр. 2019 г. в 18:37, Fedor Dikarev <<a href="mailto:fe@hamilton.rinet.ru" target="_blank">fe@hamilton.rinet.ru</a> <br>
> <mailto:<a href="mailto:fe@hamilton.rinet.ru" target="_blank">fe@hamilton.rinet.ru</a>>>:<br>
> <br>
> <br>
> 28.02.2019 19:20, Igor Savenko пишет:<br>
> > Доброе время суток!<br>
> > Подскажите, есть ли вообще способ определить, на какой именно<br>
> адрес был<br>
> > послан запрос (хост имеет несколько интерфейсов с разными<br>
> адресами или<br>
> > несколько secondary адресов на одном интерфейсе), чтобы спроксировать<br>
> > этот запрос на корректный адрес upstream. который тоже слушает на<br>
> localhost.<br>
> > Схема проста:<br>
> > server {<br>
> > listen *:80;<br>
> > server_name _;<br>
> > location / {<br>
> > proxy_pass http://$server_addr;<br>
> > }<br>
> > }<br>
> ><br>
> > При этом у хоста 2 адреса на интерфейсах, скажем, 1.2.3.4 и 5.6.7.8.<br>
> > Хотелось бы, чтобы при запросе на 5.6.7.8 в $server_addrбыл не<br>
> 1.2.3.4<br>
> > (как первый и дефолтный адрес, а 5.6.7.8). Если можно это решить<br>
> > программно (в каком-нибудь модуле, то подскажите, пожалуйста.<br>
> Спасибо!<br>
> <br>
> Про правильный server_addr не понял, а сейчас что не так?<br>
> > # ifconfig lo0<br>
> > lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384<br>
> > options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6><br>
> > inet6 ::1 prefixlen 128<br>
> > inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3<br>
> > inet 127.0.0.1 netmask 0xff000000<br>
> > inet 192.168.255.1 netmask 0xffffffff<br>
> > inet 192.168.255.2 netmask 0xffffffff<br>
> > inet 192.168.255.3 netmask 0xffffffff<br>
> > inet 192.168.255.4 netmask 0xffffffff<br>
> > inet 192.168.255.5 netmask 0xffffffff<br>
> > nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL><br>
> > groups: lo<br>
> <br>
> > # cat localhost.conf<br>
> > server {<br>
> > listen 80;<br>
> ><br>
> > location / { return 200 "$server_addr\n"; }<br>
> > }<br>
> <br>
> > # for h in 2 3 4; do curl 192.168.255.$h; done<br>
> > 192.168.255.2<br>
> > 192.168.255.3<br>
> > 192.168.255.4<br>
> <br>
> <br>
> ><br>
> > _______________________________________________<br>
> > nginx-ru mailing list<br>
> > <a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a> <mailto:<a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a>><br>
> > <a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a><br>
> ><br>
> _______________________________________________<br>
> nginx-ru mailing list<br>
> <a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a> <mailto:<a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a>><br>
> <a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a><br>
> <br>
> <br>
> _______________________________________________<br>
> nginx-ru mailing list<br>
> <a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a><br>
> <a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a><br>
> <br>
<br>
-- <br>
Fedor Dikarev<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div>