Re: Изменения в блоке if

2020-09-30 Пенетрантность Fedor Dikarev

у меня вот так работает:

map $request_uri $bad {
default '';
/string '1';
/number 1;
/zero_one '01';
/one_space '1 ';
/space_one ' 1';
/zero '0';
}
...
if ($bad) { return 403 "$bad"; }



[fe@hamilton ~]$ for loc in string number zero_one one_space space_one; do curl -w " 
%{http_code}\n" https://test.host/$loc; done
1 403
1 403
01 403
1  403
 1 403


Как-раз на части случаев тут if ($bad = '1') перестает работать. Но 
придумать кейс в обратную сторону у меня пока не получилось.


Я бы ради дебага добавил бы локейшен, где бы поставил return 202 
"$very_bad" и посмотрел какое значение там получается.


p.s.

nginx version: nginx/1.19.2 built with OpenSSL 1.1.1g  21 Apr 2020



30.09.2020 10:03, skeletor пишет:

Всем привет.
Начал замечать, что с недавних пор, (на версии 1.19.1 точно, и, скорее всего
на 1.17.Х) поведение if поменялось. При этом в документации (что en, что ru
- одинаково) сказано, что такая конструкция будет работать:

if ($slow) {
 limit_rate 10k;
}

но на практике нужно писать

if ($slow = 1) {
 limit_rate 10k;
}

иначе не работает.

Могу привести конкретный пример, где у меня не работает "упрощенный" (то
есть без сравнения с 1) if:

map $is_bot:$uri:$http_referer $very_bad {
  default '';
  "~*0:(\/api):(.*bad\.html)" '1';
  }

...
if ($very_bad = 1) {return 403;}

Именно так работает. Если же указать

if ($very_bad) {return 403;}

то не работает.

Есть такие, у которых нормально работает "упрощённый" if на новых версиях?

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,289612,289612#msg-289612

___
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

Re: Домены 3-го уровня - best practices

2019-05-25 Пенетрантность Fedor Dikarev
map $host $x_company_header {
default default.example.com;
www.example.com "";
sub1.example.comsub1.example.com
~ "^alt\d+.example.com" $host;
}

server {
listen 80;
listen 443 ssl; # не забыть wildcard cert

server_name example.com www.example.com *.example.com;

location / {
proxy_set_header Host "example.com";
proxy_set_header X-Company-Header $x_company_header;
proxy_pass http://upstream;
}
}

вот как-то так.

25.05.2019 0:10, vitcool пишет:
> Добрый день.
> 
> Есть ли какие-либо примеры лучших практик на тему "как лучше организовать
> обслуживание доменов 3-го уровня" при условии, что их количество будет не
> более 20..30, максимум 40, включая основной www. ?
> 
> По факту все они должны вести на 1 апстрим, но в случае домена 3-го уровня,
> нужно будет установить кастомный заголовок со значением равным этому домену
> и подменить заголовок Host на основной. 
> 
> Доступ к коду бекенда есть, но весьма ограниченный. Эти 2 хидера бы спасли
> ситуацию.
> 
> Что посоветуете? Пиковая нагрузка  порядка 50..75 RPS , ожидается рост до
> 100. С if-ми я так понимаю, нам не выжить.
> 
> Posted at Nginx Forum: 
> https://forum.nginx.org/read.php?21,284307,284307#msg-284307
> 
> ___
> 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

Re: Получить ключ limit_rate в логе rate_limit-а

2019-04-18 Пенетрантность Fedor Dikarev
18.04.2019 11:16, Oleg A. Mamontov пишет:
> On Wed, Apr 17, 2019 at 10:42:37PM +0300, Fedor Dikarev wrote:
>> Привет!
>>
>> Возникла задача rate_limit-итить обращения к api при помощи Nginx-а и
>> таким образом защититься от DDOS-а.
>> Авторизация к api идет через jwt, в ключе есть логин пользователя.
>> Поэтому я уже заказал demo nginx plus, планирую воспользоваться
>> функционалом jwt и rate limit-ить по логину, примерно так:
>>> auth_jwt_claim_set $login info login;
>>> limit_req_zone $login zone=one:10m rate=1r/s;
>>
>> а дальше хочется получить список нехороших логинов, через которые нас
>> пытаются досить.
>> Прочитал доку https://www.nginx.com/blog/rate-limiting-nginx/ -- там
>> написано что я получу адрес клиента, request и хостнейм в слуяае
>> превышения лимита. И это здорово.
>> А можно как-то получить значение ключа (в моем случае это логин
>> пользователя), который привысил rate limit?
>>
>> Пока есть гипотеза логгировать логин в access.log и потом
>> коррелировать access.log и error.log, но выглядит немного странно. И
>> вдруг можно получить результат сильно проще.
> 
> Перехватить 503 с помощью error_page и обработать в специальном location
> с кастомизированным log_format ?

Привет, Олег!

Спасибо за совет: да, все просто и логично, я почему-то не подумал в эту
сторону. Сегодня-завтра попробуем поднять этот вариант на QA,
понагружаем немного и отпишусь о результатах.
--
Fedor Dikarev
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Получить ключ limit_rate в логе rate_limit-а

2019-04-17 Пенетрантность Fedor Dikarev

Привет!

Возникла задача rate_limit-итить обращения к api при помощи Nginx-а и 
таким образом защититься от DDOS-а.
Авторизация к api идет через jwt, в ключе есть логин пользователя. 
Поэтому я уже заказал demo nginx plus, планирую воспользоваться 
функционалом jwt и rate limit-ить по логину, примерно так:

auth_jwt_claim_set $login info login;

> limit_req_zone $login zone=one:10m rate=1r/s;

а дальше хочется получить список нехороших логинов, через которые нас 
пытаются досить.
Прочитал доку https://www.nginx.com/blog/rate-limiting-nginx/ -- там 
написано что я получу адрес клиента, request и хостнейм в слуяае 
превышения лимита. И это здорово.
А можно как-то получить значение ключа (в моем случае это логин 
пользователя), который привысил rate limit?


Пока есть гипотеза логгировать логин в access.log и потом коррелировать 
access.log и error.log, но выглядит немного странно. И вдруг можно 
получить результат сильно проще.

--
Fedor Dikarev
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

custom 404 для разных запросов

2019-02-28 Пенетрантность Fedor Dikarev
Всем добрый день!

Решил поинтересоваться: может кто-то уже решал подобную задачу и может
поделиться идеей как лучше сделать.

Суть задачи: есть сайт, контент максимально статичен, большая часть это
html + js + css + png, плюс api на отдельном домене. Положить все
asset-ы (js, css, png) в отдельный каталог и отдельный location не
получается, пока все лежит в разнобой.

Возникла задача отдавать красивую страницу, когда пользователь
опечатался или пришел по ссылке, которой больше нет. Под это нарисовали
single-page-application на 80kb, которое надо отдавать на 404-ый код.

Но при этом есть еще какое-то количество запросов на уже не существующие
js, css и api которые когда-то были на этом домене. И на эти запросы не
хочется отдавать 80kb на запрос, хочется ограничиться чем-то попроще.

Пока идея только сделать map $request_uri $error_page, в нем по regexp-у
отловить расширения файлов и дописать location-ы где были раньше api.
Но эта идея мне не очень нравится, и хуже всего: даже не могу понять что
именно в ней меня не устраивает. Просто есть ощущение, что что-то не
учел и будут какие-то подводные камни.

Делал ли кто-то уже подобную штуку? Можете поделиться опытом
использования и подводными камнями, что были?

--
Fedor Dikarev
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: local IP address

2019-02-28 Пенетрантность Fedor Dikarev
В общем я подумал еще раз, и понял что или не понимаю исходную задачу, 
или не понимаю пути ее решения.


Но вдруг это поможет:
у нас тоже есть задача, что разные сервисы должны слушаться на разных 
адресах: один адрес для public-сервисов, второй для ограниченного круга 
лиц, третий для другого круга и т.д.


Решаем это так: в конфиге nginx-а для каждого сервера пишем listen ip:80 
для каждого уровня доступа свой ip адрес, дальше server_name нужный для 
сервиса. А сервисы уже в docker-е, и в nginx-е просто proxy_pass на 
expose-нутый порт. И все работает. (понятно что эти конфиги пишем не 
руками, но как идея. хотя могу и программой поделиться, если задача 
такая же)


28.02.19 23:00, Fedor Dikarev пишет:

А это точно тестируемый конфиг приведен? Может там еще что-то есть?

Тут получается что 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

502 Bad Gateway

502 Bad Gateway
nginx/1.15.8


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

502 Bad Gateway

502 Bad Gateway
nginx/1.15.8


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 <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 metric 0 mtu 16384
 >         options=63
 >         inet6 ::1 prefixlen 128
 >         inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
 >         inet 127.0.0.1 netmask 0xff00
 >         inet 192.168.255.1 netmask 0x
 >         inet 192.168.255.2 netmask 0x
 >         inet 192.168.255.3 netmask 0x
 >         inet 192.168.255.4 netmask 0x
 >         inet 192.168.255.5 netmask 0x
 >         nd6 options=21
 >         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.2

Re: local IP address

2019-02-28 Пенетрантность Fedor Dikarev

А это точно тестируемый конфиг приведен? Может там еще что-то есть?

Тут получается что 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_headerX-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

502 Bad Gateway

502 Bad Gateway
nginx/1.15.8


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

502 Bad Gateway

502 Bad Gateway
nginx/1.15.8


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 <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 metric 0 mtu 16384
 >         options=63
 >         inet6 ::1 prefixlen 128
 >         inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
 >         inet 127.0.0.1 netmask 0xff00
 >         inet 192.168.255.1 netmask 0x
 >         inet 192.168.255.2 netmask 0x
 >         inet 192.168.255.3 netmask 0x
 >         inet 192.168.255.4 netmask 0x
 >         inet 192.168.255.5 netmask 0x
 >         nd6 options=21
 >         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

Re: local IP address

2019-02-28 Пенетрантность Fedor Dikarev

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 metric 0 mtu 16384
> options=63
> inet6 ::1 prefixlen 128
> inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
> inet 127.0.0.1 netmask 0xff00
> inet 192.168.255.1 netmask 0x
> inet 192.168.255.2 netmask 0x
> inet 192.168.255.3 netmask 0x
> inet 192.168.255.4 netmask 0x
> inet 192.168.255.5 netmask 0x
> nd6 options=21
> 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
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
> 
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: GET-параметры как статическая страница

2019-01-08 Пенетрантность Fedor Dikarev
08.01.2019 3:23, valet пишет:
> Здравствуйте.
> 
> Вопрос такой: на сервере лежат статические html-файлы с именами типа
> index.html?id=1 index.html?id=2 и т.д. - то есть это их имена именно в таком
> виде.
> Как заставить nginx отдавать собственно именно эти файлы?
> 
> стандартный кусок конфига
> location / {
> root/data/www/site.ru/;
> index index.html;
> }
> на запросы типа http://site.ru/index.html?id=1 отдает просто
> http://site.ru/index.html, то есть параметры отбрасываются.
> 
> Я так подозреваю нужен какой-то правиьлный rewite, но гугление пока не
> помогает, знаний тоже не хватает, помогите разобраться.

можно попробовать try_files, например так:
> location /args_test/ { try_files $uri$is_args$args =404; }

или так:
> location /args_test/ { try_files $uri$is_args$args $uri; }

И тогда:
> root@hamilton:/st/hosting/hamilton/htdocs/args_test # ls
> index.html  index.html?id=1

> root@hamilton:/st/hosting/hamilton/htdocs/args_test # cat *
> none
> one

> curl 'http://hamilton.rinet.ru/args_test/index.html?id=1'
> one

возможно это решит конкретно эту задачу. Но надо помнить, что добавление
любого другого параметра в запрос все сломает, и если их будет
несколько, то важен будет и порядок в котором они передаются в запросе.
Если надо будет и такие случаи разобрать, то уже надо будет правильный
map строить от аргументов map-ить в имя файла на диске.

> 
> С уважением, Леонид.
> 
> Posted at Nginx Forum: 
> https://forum.nginx.org/read.php?21,282565,282565#msg-282565
> 
> ___
> 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

Re: GeoIP

2019-01-05 Пенетрантность Fedor Dikarev

05.01.19 13:57, Gena Makhomed пишет:

On 05.01.2019 12:18, Vladimir Getmanshchuk wrote:


Гена, с City скрипт тоже корректно работает?


В файле
http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip
нет городов, там есть только код континента, название континента, код 
страны и название страны.


Поле is_in_european_union у них выставляется очень странным образом.
Например, страна 3579143,en,NA,"North America",GP,Guadeloupe,1
которая находится в Америке считается входящей в Евросоюз.
Или вот эти африканские страны
935317,en,AF,Africa,RE,Réunion,1
1024031,en,AF,Africa,YT,Mayotte,1
у них тоже являются членами Евросоюза.

И это правильно:
Гваделупа – французская заморская территория, расположенная на островах 
в южной части Карибского моря.
Реюньон – французский заморский департамент на одноименном острове в 
Индийском океане
Майотта – заморский регион и департамент Франции, а также архипелаг, 
который относится к Коморским островам и находится между северным 
Мадагаскаром и северным Мозамбиком.


и эти территории соответственно принадлежат к Евросоюзу. И там, 
например, надо соблюдать законы и требования EU.




P.S.

Лицензия на код BSD 2-Clause License, так что Вы легко можете
сделать форк и подправить этот скрипт под свои потребности,
например, добавив туда поддержку City для платных баз maxmind.


On Fri, Jan 4, 2019 at 5:58 PM Gena Makhomed  wrote:



Какие есть альтернативы maxmind и/или этому модулю?



Есть альтернативы модулю ngx_http_geoip_module.

Я просто конвертирую GeoLite2 в формат, который понимает nginx
с помощью своего скрипта https://github.com/makhomed/nginx-geo
запускаемого через крон раз в сутки, так что таким образом
у меня в nginx используется всегда самая свежая база GeoLite2
через модуль http://nginx.org/en/docs/http/ngx_http_geo_module.html

Встроенный в nginx модуль ngx_http_geo_module не использует никаких
сторонних библиотек, так что он работает максимально стабильно
и надежно, при этом использует минимальное количество памяти.




--
Fedor Dikarev
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: drop connection

2018-12-21 Пенетрантность Fedor Dikarev
21.12.2018 8:34, inkognito0609 пишет:
> Доброго времени суток!
> 
> Кейс такой, на NS прописан 'wildcard *.exemple.com', директивой server_name
> разгуливаю на бэкенды.
> 
> При наборе разной белиберды - 'asdfgasdg.exemple.com' отправляет на первый
> server_name.
> Сделал заглушку типа 'server_name _;' которая кидает на 404.
> Как совсем дропать имена которые не заданы в конфиге?

return 444; ?

> 
> Posted at Nginx Forum: 
> https://forum.nginx.org/read.php?21,282435,282435#msg-282435
> 
> ___
> 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

Variables в add_after_body или передача параметров в njs subrequest

2018-09-25 Пенетрантность Fedor Dikarev
Привет!

Продолжаю свой вопрос про построение динамического бинарника и
использование для этого add_afer_body и njs
> http://mailman.nginx.org/pipermail/nginx-ru/2018-September/061454.html
> http://mailman.nginx.org/pipermail/nginx-ru/2018-September/061461.html

В итоге сейчас собрали такую конструкцию:
> location ~ /new4game-qa/web-installer/(.*).exe {
>   add_after_body /exe_payload/$is_args$args;
>   alias /files/new4game-qa/web-installer/4game-setup.exe
> }
> location /exe_payload {
>   internal;
>   # rewrite ^/exe_payload/ 
> /exe_payload/2/$gameKey/$gamekey/$arg_gameKey/$arg_gamekey/ break;
>   proxy_set_header X-GameKey "2/$gameKey/$arg_gameKey";
>   set $gameKey $arg_gameKey;
>   js_content exe_payload;
> }

(как видим тут я пробую разные варианты передать $arg_gameKey в
обработчик и все безуспешно) меня тут даже спасет если в njs будет
передаваться оригинальный url запроса, но этого я тоже не смог добиться :(
И сама функция:
> function exe_payload(r) {
> ...
> var config = {
> "gameKey": r.variables['gameKey'],
> "r.vars": r.variables,
> "r.uri": r.uri,
> "r.headers": r.headersIn,
> "r.key": r.headersIn["X-GameKey"]
> };
> var configStr = JSON.stringify(config);

И на выходе получаю:
> 0079d9c0  61 6d 65 4b 65 79 22 3a  22 22 2c 22 72 2e 76 61  |ameKey":"","r.va|
> 0079d9d0  72 73 22 3a 6e 75 6c 6c  2c 22 72 2e 75 72 69 22  |rs":null,"r.uri"|
> 0079d9e0  3a 22 2f 65 78 65 5f 70  61 79 6c 6f 61 64 2f 24  |:"/exe_payload/$|
> 0079d9f0  69 73 5f 61 72 67 73 24  61 72 67 73 22 2c 22 72  |is_args$args","r|
> 0079da00  2e 68 65 61 64 65 72 73  22 3a 6e 75 6c 6c 2c 22  |.headers":null,"|

Собственно можно как-то раскрывать variables в location add_after_body?
Ну или может есть какой-то более правильный способ передать параметр в
njs функцию вызываемую внутри этого subrequest-а?

--
Fedor Dikarev
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: SSI для бинарных данных или аналог

2018-09-11 Пенетрантность Fedor Dikarev
Сейчас примерно так и сделали:

> add_header Content-Disposition $header_content_disposition;
> set $header_content_disposition 'attachment;
> filename="$request_basename.$cnf_map.exe"';

Но маркетинг жалуется, что пользователей пугают такие имена. Плюс
брэндирование таким методом не запихнешь: картинки слишком большие :-(

11.09.2018 15:52, Vladislav Shabanov пишет:
> Проще всего передавать параметры в имени exe-файла. Браузеры его не
> портят, сохраняют так, как сервер сказал. 
> Поэтому можно закатать в хвост имени 10-20 байт закодированные в base36.
> А файл пусть посмотрит, как он называется, и решит, он сегодня gcc или
> clang :)
> И докачает остальную инфу по этим 10-20 байтам с сервера.
>
>
>> 11 сент. 2018 г., в 15:45, Илья Шипицин > <mailto:chipits...@gmail.com>> написал(а):
>>
>>
>>
>> вт, 11 сент. 2018 г. в 14:02, Fedor Dikarev > <mailto:f...@hamilton.rinet.ru>>:
>>
>> 11.09.2018 10:08, Илья Шипицин пишет:
>>>
>>>
>>> вт, 11 сент. 2018 г. в 9:42, Fedor Dikarev >> <mailto:f...@hamilton.rinet.ru>>:
>>>
>>> Привет!
>>>
>>> Столкнулся с задачей: хотим чтобы nginx собирал бинарный
>>> ответ из
>>> частей. Пример задачи: клиент скачивает из личного кабинета
>>> установщик
>>> (exe файл), а мы в конец этого exe файла дописываем json с
>>> конфигурацией
>>>
>>>
>>> установщики в виде exe считаются небезопасными из-за dll hijacking
>>> (например, вот тут разобрано: https://portableapps.com/node/54917 )
>>>
>>>
>>> если у вас exe с цифровой подписью, то дописать в конец не
>>> получится.
>>> если без подписи - вас пользователи замучают "у меня виндовс
>>> ругается на недоверенный файл"
>>
>
>
> ___
> 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

Re: SSI для бинарных данных или аналог

2018-09-11 Пенетрантность Fedor Dikarev
11.09.2018 15:45, Илья Шипицин пишет:
> ...
>
> И плюс там не только настройки, но еще брэндирование: в
> зависимости то того, из какого раздела пользователь скачал
> установщик, надо подкладывать разные иконки и background-ы.
>
>
> а после того, как вы зарелизите, к вам придут разработчики с просьбой
> "придумай, как сделать, чтобы клиенты обновились"
>
> имхо, можно смотреть в сторону ClickOnce или аналогов

Вопрос автообновления клиентов проработан и с ним пока сложностей нет,
насколько я знаю.

А за ClickOnce спасибо, закину разработчикам: я сам не очень хорошо
разбираюсь в теме деплоя windows приложений, мне сложно сказать какие у
нас требования и сценарии в этой части.


> ___
> 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

Re: SSI для бинарных данных или аналог

2018-09-11 Пенетрантность Fedor Dikarev
11.09.2018 10:08, Илья Шипицин пишет:
>
>
> вт, 11 сент. 2018 г. в 9:42, Fedor Dikarev  <mailto:f...@hamilton.rinet.ru>>:
>
> Привет!
>
> Столкнулся с задачей: хотим чтобы nginx собирал бинарный ответ из
> частей. Пример задачи: клиент скачивает из личного кабинета установщик
> (exe файл), а мы в конец этого exe файла дописываем json с
> конфигурацией
>
>
> установщики в виде exe считаются небезопасными из-за dll hijacking
> (например, вот тут разобрано: https://portableapps.com/node/54917 )
>
>
> если у вас exe с цифровой подписью, то дописать в конец не получится.
> если без подписи - вас пользователи замучают "у меня виндовс ругается
> на недоверенный файл"

Файл с подписью. И разработчики утверждают, что подписывается не весь
файл целиком, а только ключевые части, которые меняться не будут.

И вот тут утверждают тоже самое:

> https://stackoverflow.com/questions/47646135/where-is-the-digital-signature-stored-when-code-signing-a-exe-file-in-windows
А здесь это подтверждают:

> http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx
но в любом случае проверю что все ок. Если нет, то придется выносить
логику в отдельную программу и переподписывать.

>
> кажется, лучшим вариантом было бы привязка программы к некому feed,
> откуда бы программа
> скачивала настройки

ну там не только настройки, хотя даже в случае настроек доступ к feed-у,
в общем случае, надо как-то авторизовать, да и доступа к интернету может
не быть в момент установки.

И плюс там не только настройки, но еще брэндирование: в зависимости то
того, из какого раздела пользователь скачал установщик, надо
подкладывать разные иконки и background-ы.

>
>  
>
> для этого клиента. И собственно при первом запуске пользователю не
> надо
> вбивать адреса серверов и другие базовые настройки, все уже на месте.
>
> Собственно можно ли через SSI собирать бинарные ответы?
>
> Или можно ли как-то из своего скрипта сделать chunked ответ, где через
> X-Accel-Redirect отдать первую бинарную часть ответа, а потом выдать
> контент с конфигурацией?
> -- 
> Fedor Dikarev
> ___
> 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
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

SSI для бинарных данных или аналог

2018-09-10 Пенетрантность Fedor Dikarev
Привет!

Столкнулся с задачей: хотим чтобы nginx собирал бинарный ответ из
частей. Пример задачи: клиент скачивает из личного кабинета установщик
(exe файл), а мы в конец этого exe файла дописываем json с конфигурацией
для этого клиента. И собственно при первом запуске пользователю не надо
вбивать адреса серверов и другие базовые настройки, все уже на месте.

Собственно можно ли через SSI собирать бинарные ответы?

Или можно ли как-то из своего скрипта сделать chunked ответ, где через
X-Accel-Redirect отдать первую бинарную часть ответа, а потом выдать
контент с конфигурацией?
-- 
Fedor Dikarev
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Проксирование ssl сертификата и ключа

2018-04-22 Пенетрантность Fedor Dikarev
Попробуйте добавить `proxy_ssl_server_name on;`
Можно еще повыставлять значения в `proxy_ssl_name` и `proxy_set_header
Host` если просто с `proxy_ssl_server_name on` не сработает.

16.04.18 14:25, tresor.fk пишет:
> Помогите разобраться со следующей ситуацией:
> 
> Есть веб сервер подрядчика, доступ к которому осуществляется по выделенному
> каналу и при указании сертификата и приватного ключа
> 
> То есть у нас есть линуксовый сервер, с которого мы инициализируем
> подключение. Для этого на нем настроен дополнительный сетевой интерфейс.
> 
> Например если запустить:
> 
> wget --bind-address=
> --certificate=/etc/nginx/ssl/private_online.crt
> --private-key=/etc/nginx/ssl/private_online.key  https://
> 
> То подключение успешное - "HTTP request sent, awaiting response... 200 OK"
> 
> Но нам нужно на этом сервере настроить nginx, чтобы мы со своих компьютеров
> открывали в браузере IP нашего сервера и попадали на сервер подрядчика
> 
> Как настроить NGINX, чтобы он делал bind_adress и передавал для авторизации
> сертификат и ключ по аналогии с wget?
> 
> Пробовал использовать следующее, но не помогает
> 
> proxy_bind XX.XX.XX.XX;
> proxy_pass https://;
> proxy_ssl_certificate /etc/nginx/ssl/private_online.pem;
> proxy_ssl_certificate_key /etc/nginx/ssl/private_online_key.pem;
> 
> Posted at Nginx Forum: 
> https://forum.nginx.org/read.php?21,279454,279454#msg-279454
> 
> ___
> 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

Re: Условие по времени - так можно?

2017-12-21 Пенетрантность Fedor Dikarev
В cron что-то подобное:
> cp -f /etc/nginx/includes/condition.conf.day 
> /etc/nginx/includes/condition.conf
> nginx -t && pkill -HUP nginx

И симметричную строчку на вечер.

21.12.17 11:00, softshape пишет:
> Всем привет,
> 
> задача - закрыть ботам доступ на сайт днем и открыть ночью. Сейчас условие
> отсечки ботов простое -
> 
>  if ($http_user_agent ~
> Linguee|statdom|SemrushBot|AhrefsBot|Reefeedbot|bingbot|SputnikBot|Crowsnest|MegaIndex|.
>   return 403;
> }
> 
> Что нужно в него добавить, чтобы возвращать 403ю только, допустим, с 6:00 до
> 23:00 ?
> 
> Posted at Nginx Forum: 
> https://forum.nginx.org/read.php?21,277867,277867#msg-277867
> 
> ___
> 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

Re: https upstream server и локальный backup http upstream

2017-12-16 Пенетрантность Fedor Dikarev
Суть задачи в том числе и во втором "но":
> Второе но: если этот прокси недоступен/не ответил/просто 500-тит, то
> сделать fallback опять на локальную node.

то есть если у меня есть:
> upstream remote { server 127.0.0.1:8081; }
> upstream local { server 127.0.0.1:7070; }

> server { listen 8081; return 200 remote\n; }
> server { listen 7070; return 200 local\n; }

то по заголовку я хожу в remote сервер:
> curl -fs -H "X-Some-Header: yes" hamilton.rinet.ru/some_header
> remote

Если же remote 500-тит, или вообще закоментировать его, то чтобы ходил в
local:
> curl -fs -H "X-Some-Header: yes" hamilton.rinet.ru/some_header
> local

и да, эта конструкция ведет себя как надо:
> location =/some_header {
> proxy_intercept_errors on;
> if ($remote) {
>   proxy_pass http://remote;
>   error_page 500 502 504 = @local;
> }
> proxy_pass http://local;
> }
> location @local {   
> internal;
> proxy_pass http://local;
> }

Но в большой оригинальной задаче и так уже много if-ов, поэтому и
хочется получить решение без использования if-а.

В идеале: собственно в виде backup_proto=http :) поскольку эта же задача
максимально элегантно решалась через
> upstream remote {
>   server remote;
>   server local backup;
> }
пока не появилось требование к https у upstream-а

16.12.17 22:52, Aziz Rozyev пишет:
> может я, конечно, не уловил сути задачи, но и без error_page переключается:
> 
>  39map $http_x_myheader $remote {
>  40"" 0;
>  41"test" 1;
>  42}
>  43
>  44upstream remote_up {
>  45server nginx.org:443;
>  46}
>  47
>  48upstream local_up {
>  49server localhost:7070;
>  50}
> 
>  58server {
>  59listen 8085;
>  60location / {   
>   
>  62proxy_set_header Host $host;
>  63proxy_set_header Connection "";
>  64proxy_http_version 1.1;
>  65
>  66if ($remote) {
>  67   proxy_pass https://remote_up;
>  68}
>  69proxy_pass http://local_up;
>  70}
>  71}
> 
>  73server {
>  74listen 7070;
>  75return 200 "OK";
>  76}
> 
> 
> [root@tc ~]# curl http://localhost:8085/
> OK
> 
> [root@tc ~]# curl -H 'X-Myheader: test' http://localhost:8085/
> 
>  "http://www.w3.org/TR/html4/loose.dtd;>
>   type="application/rss+xml" title="nginx news" 
> href="http://nginx.org/index.rss;>nginx news
> [ … ]
> 
> 
> без if-a что-то не придумал, как обойтись.
> 
> br,
> Aziz.
> 
> 
> 
> 
> 
>> On 16 Dec 2017, at 19:28, Fedor Dikarev <f...@hamilton.rinet.ru> wrote:
>>
>> Попробовал этот вариант, и без error_page он не переключается на local.
>> Но если вписать error_page внутрь if-а, то вроде как работает как нужно.
>> Осталось убедить самого себя, что без if-а тут не обойтись. Хотя и очень
>> хочется.
>>
>> 16.12.17 15:21, Aziz Rozyev пишет:
>>> а вариант с 2 апстримами не подходит?
>>>
>>> upstream remote_up {
>>>remote_upstream:443;
>>> }
>>>
>>> upstream local_up {
>>>localhost:7070;
>>> }
>>>
>>> map $http_x_some_header $remote {
>>>  “”0;
>>>  “default” 1;
>>> }
>>>
>>> if ($remote) {
>>>  proxy_pass https://remote;
>>> }
>>> proxy_pass http://local;
>>>
>>>
>>> br,
>>> Aziz.
>>>
>>>
>>>
>>>
>>>
>>>> On 16 Dec 2017, at 12:50, Fedor Dikarev <f...@hamilton.rinet.ru> wrote:
>>>>
>>>> Привет!
>>>>
>>>> Я тут пытаюсь навести красоту в одном конфиге Nginx-а и что-то пока
>>>> совсем беда :-(
>>>>
>>>> Формулировка, правда, изначально довольно извращенная:
>>>> есть Nginx, по-умолчанию проксирует запрос в локально работающую node.
>>>> Но если в запросе есть заголовок X-Some-Header, то запрос
>>>> нужно спроксировать на другой сервер по https.
>>>> Второе но: если этот прокси недоступен/не ответил/просто 500-тит, то
>>>> сделать fallback опять на локальную node.
>>>>
>>>> первая мысль была:
>>>> map $http_x_some_header $use_backend {
>>&g

Re: https upstream server и локальный backup http upstream

2017-12-16 Пенетрантность Fedor Dikarev
Попробовал этот вариант, и без error_page он не переключается на local.
Но если вписать error_page внутрь if-а, то вроде как работает как нужно.
Осталось убедить самого себя, что без if-а тут не обойтись. Хотя и очень
хочется.

16.12.17 15:21, Aziz Rozyev пишет:
> а вариант с 2 апстримами не подходит?
> 
> upstream remote_up {
> remote_upstream:443;
> }
> 
> upstream local_up {
> localhost:7070;
> }
> 
> map $http_x_some_header $remote {
>   “”0;
>   “default” 1;
> }
> 
> if ($remote) {
>   proxy_pass https://remote;
> }
> proxy_pass http://local;
> 
> 
> br,
> Aziz.
> 
> 
> 
> 
> 
>> On 16 Dec 2017, at 12:50, Fedor Dikarev <f...@hamilton.rinet.ru> wrote:
>>
>> Привет!
>>
>> Я тут пытаюсь навести красоту в одном конфиге Nginx-а и что-то пока
>> совсем беда :-(
>>
>> Формулировка, правда, изначально довольно извращенная:
>> есть Nginx, по-умолчанию проксирует запрос в локально работающую node.
>> Но если в запросе есть заголовок X-Some-Header, то запрос
>> нужно спроксировать на другой сервер по https.
>> Второе но: если этот прокси недоступен/не ответил/просто 500-тит, то
>> сделать fallback опять на локальную node.
>>
>> первая мысль была:
>> map $http_x_some_header $use_backend {
>>  "" http://localhost:7070;
>>  default https://remote_upstream;
>> }
>> upstream remote_upstream {
>>  server remote:443;
>>  server localhost:7070 backup;
>> }
>>
>> но локальный сервер не https, и все не очень красиво :-(
>> думал тут еще поднять на этом же nginx локальный https на порту 7073,
>> проксировать в него как backup, но тут начинаются сложности с
>> сертификатами.
>>
>> Опять же думал о другом варианте:
>> proxy_pass $use_backend;
>> error_page 500 502 504 = @fallback_local_node;
>>
>> location @fallback_local_node {
>>  internal;
>>  proxy_pass http://localhost:7070;
>> }
>>
>> но тут получается что если заголовка не было, node ответил 502, то мы
>> пойдем в node еще раз. Не то, чтобы прям ужас, но некрасиво
>> получается...
>>
>> Может кто подскажет тут красивое решение?
>>
>> Ну и как feature request: может можно добавить к опции backup для
>> директивы server в upstream еще какой-нибудь параметр backup_proto=http
>> или другую опцию backup_http, чтобы при переключении на backup сервер
>> менялся и протокол обращения.
>> -- 
>> 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
> 

-- 
Fedor Dikarev
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

https upstream server и локальный backup http upstream

2017-12-16 Пенетрантность Fedor Dikarev
Привет!

Я тут пытаюсь навести красоту в одном конфиге Nginx-а и что-то пока
совсем беда :-(

Формулировка, правда, изначально довольно извращенная:
есть Nginx, по-умолчанию проксирует запрос в локально работающую node.
Но если в запросе есть заголовок X-Some-Header, то запрос
нужно спроксировать на другой сервер по https.
Второе но: если этот прокси недоступен/не ответил/просто 500-тит, то
сделать fallback опять на локальную node.

первая мысль была:
map $http_x_some_header $use_backend {
  "" http://localhost:7070;
  default https://remote_upstream;
}
upstream remote_upstream {
  server remote:443;
  server localhost:7070 backup;
}

но локальный сервер не https, и все не очень красиво :-(
думал тут еще поднять на этом же nginx локальный https на порту 7073,
проксировать в него как backup, но тут начинаются сложности с
сертификатами.

Опять же думал о другом варианте:
proxy_pass $use_backend;
error_page 500 502 504 = @fallback_local_node;

location @fallback_local_node {
  internal;
  proxy_pass http://localhost:7070;
}

но тут получается что если заголовка не было, node ответил 502, то мы
пойдем в node еще раз. Не то, чтобы прям ужас, но некрасиво
получается...

Может кто подскажет тут красивое решение?

Ну и как feature request: может можно добавить к опции backup для
директивы server в upstream еще какой-нибудь параметр backup_proto=http
или другую опцию backup_http, чтобы при переключении на backup сервер
менялся и протокол обращения.
-- 
Fedor Dikarev
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Странное с set_real_ip_from

2016-07-05 Пенетрантность Fedor Dikarev

И можно поделиться с общественностью:
а) помогло ли включение real_ip_recursive?
б) что приезжало в заголовке X-Forwarded-For?

On 04/07/16 15:28, Vladimir Sopot wrote:

Внезапно, подозреваю отсутствие в конфиге real_ip_recursive on;
Сегодня буду тестировать.


On 02 Jul 2016, at 19:24, Vladimir Sopot <j...@jdwuzhere.ru> wrote:

Да, конечно, есть и real_ip_header X-Forwarded-For;
В конфиге есть ещё куча других сетей оперы и с ними, кажется, нет проблем.


On 02 Jul 2016, at 13:39, Fedor Dikarev <f...@nginx.com> wrote:

Opera использует заголовок X-Forwarded-For для передачи адреса клиента,
а не X-Real-IP как nginx ожидает по-умолчанию. Добавьте:

real_ip_headerX-Forwarded-For;



http://nginx.org/ru/docs/http/ngx_http_realip_module.html#real_ip_header



02.07.16 12:45, Vladimir Sopot пишет:

Привет!

В nginx.conf есть

set_real_ip_from 185.26.180.0/22;
fastcgi_param REMOTE_ADDR $remote_addr;

Но при этом до php-fpm доходит

$_SERVER["REMOTE_ADDR”]=185.26.182.31

nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --without-http_uwsgi_module --without-http_scgi_module 
--with-http_ssl_module --with-http_stub_status_module 
--without-mail_pop3_module --without-mail_imap_module 
--without-mail_smtp_module --with-http_geoip_module 
--add-module=../ngx_cache_purge-2.3/ --with-file-aio 
--with-http_image_filter_module --with-http_realip_module

Чего не хватает котенку?

___
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



--
Fedor Dikarev

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Странное с set_real_ip_from

2016-07-02 Пенетрантность Fedor Dikarev

А что в заголовках запроса приезжает?
Вот, например, мой эксперимент:

fe@hamilton:~ % nc -kl 
GET / HTTP/1.1
Host: hamilton.example.com:
...
x-lb-local: 82.145.209.252 80
X-Forwarded-For: 141.0.15.155
X-Content-Opt: Turbo/4.42.224


То есть видно, что запрос пришел с прокси Оперы, но в X-Forwarded-For 
совсем не мой ip адрес, а адрес из сети Оперы.
А если тут будет видно, что все правильно приезжает, то можно 
попробовать в nginx-е поднять еще один сервер, например, на том же порту 
, проверить подставляет ли Nginx $remote_addr правильно.
Если подставляет, тогда искать в конфигах где переписывается 
fastcgi_param или где не include-ится.

А если не подставляет, то тогда уже включать debug на эти коннекты:

events {
debug_connection 185.26.180.0/22;

> }

http://nginx.org/ru/docs/debugging_log.html


Запускать Nginx в debug-е, и либо станет понятно что происходит, либо 
сюда уже постить конфиг этого  сервера и debug log этих соединенй.


On 02/07/16 19:24, Vladimir Sopot wrote:

Да, конечно, есть и real_ip_header X-Forwarded-For;
В конфиге есть ещё куча других сетей оперы и с ними, кажется, нет проблем.


On 02 Jul 2016, at 13:39, Fedor Dikarev <f...@nginx.com> wrote:

Opera использует заголовок X-Forwarded-For для передачи адреса клиента,
а не X-Real-IP как nginx ожидает по-умолчанию. Добавьте:

real_ip_headerX-Forwarded-For;



http://nginx.org/ru/docs/http/ngx_http_realip_module.html#real_ip_header



02.07.16 12:45, Vladimir Sopot пишет:

Привет!

В nginx.conf есть

set_real_ip_from 185.26.180.0/22;
fastcgi_param REMOTE_ADDR $remote_addr;

Но при этом до php-fpm доходит

$_SERVER["REMOTE_ADDR”]=185.26.182.31

nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --without-http_uwsgi_module --without-http_scgi_module 
--with-http_ssl_module --with-http_stub_status_module 
--without-mail_pop3_module --without-mail_imap_module 
--without-mail_smtp_module --with-http_geoip_module 
--add-module=../ngx_cache_purge-2.3/ --with-file-aio 
--with-http_image_filter_module --with-http_realip_module

Чего не хватает котенку?

___
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



--
Fedor Dikarev

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Странное с set_real_ip_from

2016-07-02 Пенетрантность Fedor Dikarev
Opera использует заголовок X-Forwarded-For для передачи адреса клиента,
а не X-Real-IP как nginx ожидает по-умолчанию. Добавьте:
> real_ip_headerX-Forwarded-For;

> http://nginx.org/ru/docs/http/ngx_http_realip_module.html#real_ip_header


02.07.16 12:45, Vladimir Sopot пишет:
> Привет!
> 
> В nginx.conf есть
> 
> set_real_ip_from 185.26.180.0/22;
> fastcgi_param REMOTE_ADDR $remote_addr;
> 
> Но при этом до php-fpm доходит
> 
> $_SERVER["REMOTE_ADDR”]=185.26.182.31
> 
> nginx version: nginx/1.10.1
> built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
> built with OpenSSL 1.0.1e-fips 11 Feb 2013
> TLS SNI support enabled
> configure arguments: --without-http_uwsgi_module --without-http_scgi_module 
> --with-http_ssl_module --with-http_stub_status_module 
> --without-mail_pop3_module --without-mail_imap_module 
> --without-mail_smtp_module --with-http_geoip_module 
> --add-module=../ngx_cache_purge-2.3/ --with-file-aio 
> --with-http_image_filter_module --with-http_realip_module
> 
> Чего не хватает котенку?
> 
> ___
> 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