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