Re: Nginx и регулярные выражения

2019-04-08 Пенетрантность Alexey via nginx-ru

08.04.2019 19:18, Sergey Kandaurov пишет:

On 8 Apr 2019, at 19:03, RuslanValitov  wrote:

Добрый день. Пишу conf файл для своего сайта.
Задача сделать Location который удовлетворяет следующим путям:
site.ru/catalog/
site.ru/catalog/?id=3
site.ru/catalog/1/
site.ru/catalog/1/?id=3
при этом необходимо получить значение $1 если оно есть.

Использую регулярное выражение:
location ~* catalog/(\w+)
--
site.ru/catalog/1/ -работает
site.ru/catalog/1/?id=3 -работает
site.ru/catalog/ - 404
--

Подскажите как изменить регулярное выражение что бы учитывался вариант
(site.ru/catalog/) ?

Используйте квантификатор "?":
location ~* catalog/(\w+)?

https://www.pcre.org/original/doc/html/pcrepattern.html#SEC17

и "?id=3" не часть uri и в проверку  регулярного выражения в location не 
попадает вообще...


и в приведенное выражение Вы поймаете еще и 
/Tratata/My/Super/TheCaTaLog/TheRE/AreMoRe/letters и в $1 будет TheRE


Но, возможно, оно Вам так и нужно., ну или

location ~ "^/catalog/(?:(?\d+)/)?$"

номер после id будет в $catalogid

наличие параметра id можно посмотреть в $arg_id внутри локешна.

Ну так.. :)

/Алексей

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

Re: no live upstreams while connecting to upstream

2019-01-09 Пенетрантность Alexey via nginx-ru

09.01.2019 0:47, Eugene Toropov пишет:

proxy_http_version 1.1; и proxy_set_header Connection '' помогли, по крайней 
мере 502 больше не вижу. Уточните, пожалуйста, можно ли еще как-то не 
прописывать явно “proxy_set_header Host tratutu” в конфиге, чтоб он правильный 
хост передавал на апстрим вместо tratata?


Ну можно, например,
proxy_set_header Host $host;
тогда дальше поедет тоже имя, что передано клиентом.

Вообще никто не мешает вместо

proxy_pass https://www.domain.ru;

написать

upstream www.domain.ru {
  server www.domain.ru:443 ...;

}
и строку proxy_pass вообще не менять, тогда ничего в плане переданных имен не 
поменяется.

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

Re: no live upstreams while connecting to upstream

2019-01-08 Пенетрантность Alexey via nginx-ru


09.01.2019 0:08, Eugene Toropov пишет:
С max_fails=0 получил ошибку "SSL_do_handshake() failed (SSL: 
error:1408F10B:SSL routines:ssl3_get_record:wrong version number) 
while SSL handshaking to upstream” (апстрим на httpS) - буду 
разбираться с SSL.



Это ошибка сразу же ? порт надо явно указать в upstream tra { server 
x.x.x.x:443 ...} и в проксипас уже proxy_pass https://tra ; секция 
upstream не в курсе откуда её будут звать и по умолчанию там :80, если 
её позвать потом https то будет как Вы написали.



апстрим умеет http/1.1 и он включен со стороны нгинкса (со сбросом 
proxy_set_header Connection '') ?
если нет, то новое ssl соединение устанавливается на каждое соединение с 
апстримом. Это дорого. если апстрим умеет http/1.1 и кипалайв, то ОЧЕНЬ 
рекомендуется их включить. (если конечно есть достаточно веские 
аргументы для вообще использования https для связи между nginx и 
апстримом. SSL дорог и хандшейк медленен, на новых процах и правильно 
собранном openssl несколько быстрее, но всеравно чертовски медленнен..., 
но кипалайв всеравно снизит нагрузку, даже без ssl, опять же количество 
соединений с 1 портом ограничено, и учитывая что по умолчапнию реюз 
запрещен, то порт остается занятым много дольше, чем он используется) Да 
и всякие лимиты nfile.


/Алексей
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: no live upstreams while connecting to upstream

2019-01-08 Пенетрантность Alexey via nginx-ru

08.01.2019 23:50, Eugene Toropov пишет:

Зачем мне upstream, если я использую proxy_pass:

 location / {
 proxy_pass  xx;
 }
?


да, сорри, во второй случае должно было быть proxy_pass

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



On 8 Jan 2019, at 23:48, Alexey via nginx-ru  wrote:

08.01.2019 23:40, Eugene Toropov пишет:

Я не совсем понял, при чем здесь параметр max_fails - его на странице proxy 
модуля нет нигде - http://nginx.org/en/docs/http/ngx_http_proxy_module.html - я 
что-то пропустил?


ustream tratata {

server tratutu:80  max_fails=XXX;

}


server {

  location / {

   proxy_pass http://tratata;

...

}

}


если Вы явно не указали upstream, то это не значит что там нет никаких 
умолчаний... укажите явно, впишите туда max_fails=0

___
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: no live upstreams while connecting to upstream

2019-01-08 Пенетрантность Alexey via nginx-ru

08.01.2019 21:01, Eugene Toropov пишет:

Добрый вечер,

Тогда получается ситуация, при которой часть запросов файрвол пропускает, а 
часть режет. При чем ночью до 9 утра не режет ничего, а вечером почти все. Как 
nginx определяет, что апстрим живой? Любой статус, отличный от 200?




посмотрите описание proxy_next_upstream


Директива также определяет, что считается неудачной попыткой работы с 
сервером. Случаи error, timeout и invalid_header всегда считаются 
неудачными попытками, даже если они не указаны в директиве. Случаи 
http_500, http_502, http_503, http_504 и http_429 считаются неудачными 
попытками, только если они указаны в директиве. Случаи http_403 и 
http_404 никогда не считаются неудачными попытками.


и директиву server из секции описания upstream

max_fails=число
    задаёт число неудачных попыток работы с сервером, которые должны 
произойти в течение времени, заданного параметром fail_timeout, чтобы 
сервер считался недоступным на период времени, также заданный параметром 
fail_timeout. По умолчанию число попыток устанавливается равным 1. 
Нулевое значение отключает учёт попыток. Что считается неудачной 
попыткой, определяется  директивами proxy_next_upstream, 
fastcgi_next_upstream, uwsgi_next_upstream,scgi_next_upstream, 
memcached_next_upstream и grpc_next_upstream.



если апстрим реально один, то укажите ему max_fails=0

А вообще смотрите запросы рядом с первым 502. там скорее всего гдето 
случились таймауты, единственный апстрим отметился как фейл и на время 
fail_timeout(10с по умолчанию) выпадает из работы.


/Алексей

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

Re: proxy_store периодически сохраняет только часть ответа :(

2018-12-02 Пенетрантность Alexey via nginx-ru

02.12.2018 23:18, Виктор Вислобоков пишет:

Схема такая: nginx(1) -> nginx(2) -> httpd
На nginx(1) пытаюсь сделать кастомный статик кэш через proxy_store. 
Почти работает, но в произвольный момент времени сохраняет на диск не 
всю страницу с ответом, а только её часть! Это именно происходит 
периодически и не зависит ни от IP адреса ни от клиента (тот же Zabbix 
у меня то получает фрагмент и ругается на малый размер страницы, то в 
следующий повтор всё получает нормально - стоит чистка файлов, 
сохранённых proxy_store каждую минуту).


А чем proxy_cache не устраивает ? прокси стор, это больше для "на века", 
а Вы трете его зачемто постоянно


У Вас proxy_temp_path и место куда сторится на одном разделе ? Если на 
разных, то, скорее всего, пока файл от одного запроса копируется, 
успевает прийти другой запрос и видя файл на месте его и отдает, ну 
сколько успело скопироваться на момент второго запроса столько и отдает.


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