Re: Nginx и регулярные выражения
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
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
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
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
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 периодически сохраняет только часть ответа :(
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