<div dir="ltr">Спасибо, но раз уж проблема понятна -- становится все проще. Надо разобраться с redirect'ом, чтобы трафик приезжал туда, куда должен, а дальше уже, как я уже понял, разрулимся через $server_addr.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">чт, 28 февр. 2019 г. в 22:11, 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>
<br>
Но вдруг это поможет:<br>
у нас тоже есть задача, что разные сервисы должны слушаться на разных <br>
адресах: один адрес для public-сервисов, второй для ограниченного круга <br>
лиц, третий для другого круга и т.д.<br>
<br>
Решаем это так: в конфиге nginx-а для каждого сервера пишем listen ip:80 <br>
для каждого уровня доступа свой ip адрес, дальше server_name нужный для <br>
сервиса. А сервисы уже в docker-е, и в nginx-е просто proxy_pass на <br>
expose-нутый порт. И все работает. (понятно что эти конфиги пишем не <br>
руками, но как идея. хотя могу и программой поделиться, если задача <br>
такая же)<br>
<br>
28.02.19 23:00, Fedor Dikarev пишет:<br>
> А это точно тестируемый конфиг приведен? Может там еще что-то есть?<br>
> <br>
> Тут получается что nginx проксирует сам на себя, и я даже не поленился <br>
> это попробовать и получил ожидаемое:<br>
>> # cat localhost.conf 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 <br>
>> <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 <br>
>> <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>
>> спроксировать<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 и <br>
>> 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>
-- <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>