Welcome! Log In Create A New Profile

Advanced

Re: Отдача большого контента через fast_cgi

Maxim Dounin
November 29, 2009 02:22PM
Hello!

On Sun, Nov 29, 2009 at 07:22:43PM +0300, Igor Sysoev wrote:

> On Sun, Nov 29, 2009 at 07:05:12PM +0300, Maxim Dounin wrote:
>
> > > > > > > > On Sun, Nov 29, 2009 at 05:50:06PM +0600, Peter A. Shevtsov wrote:
> > > > > > > >
> > > > > > > > > Увы!
> > > > > > > > > [emerg]: pcre_compile() failed: unrecognized character after (? in
> > > > > > > > > "^www\.(?p<name>.+)$" at "p<name>.+)$" in
> > > > > > > > > /etc/nginx/conf.d/virtual.conf:7
> > > > > > > >
> > > > > > > > А вот это уже бага - nginx приводит регулярное выражение к нижнему
> > > > > > > > регистру, что делает его невалидным.
> > > > > > > >
> > > > > > > > Патч.
> > > > > > >
> > > > > > > Я думаю, лучше проверять "?P<" на стадии конфигурации, чем гонять caseless
> > > > > > > в run-time. Вроде, кроме "?P<", больше таких конструкций нет ?
> > > > > >
> > > > > > Другой патч. В принципе, PCRE использует большие буквы в опциях и прочем,
> > > > > > но насколько я понимаю, в контексте server_name все они, кроме "?P<",
> > > > > > не имеют смысла.
> > > > >
> > > > > Не-а.
> > > > >
> > > > > server_name ~^(?<name>.+)\Q.example.com\E;
> > > > >
> > > > > Дальше будем продолжать? :)
> > > >
> > > > Тогда можно оставлять без изменения символ после "\" и "?".
> > >
> > > Патч.
> >
> > server_name "~^www(?<number>\p{N}+)\.example\.com$";
>
> Какой человек, находясь в трезвом уме и светлой памяти, напишет "\p{N}"
> вместо "\d" ? Я, например, про "\p{N}" узнал только что из pcresyntax(3) :)

Кто сказал - человек? Давно уже всеми подобными вещами занимаются
огромные боевые человекоподобные роботы. ;)

> > Вот что действительно можно сделать - это не ставить caseless
> > если в регулярном выражении не нашлось ни одного символа в верхнем
> > регистре. Это должно быть безопасно.
>
> Да, лучше сделать так.

Патч.

Maxim Dounin
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1259522272 -10800
# Node ID dc6a8619b04e332cfc6f6736c5f4ee7c905c0ccf
# Parent 63dde5a94756ec3f5080f078b1b333f66cf433e6
Core: don't convert regex to lower case, use caseless flag instead.

Converting to lowercase is wrong as it breaks regular expressions like
"(?P<name>...)".

diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -3507,16 +3507,15 @@ ngx_http_core_server_name(ngx_conf_t *cf
sn->server = cscf;
sn->name = value[i];

- ngx_strlow(sn->name.data, sn->name.data, sn->name.len);
-
if (value[i].data[0] != '~') {
+ ngx_strlow(sn->name.data, sn->name.data, sn->name.len);
continue;
}

#if (NGX_PCRE)
{
ngx_regex_compile_t rc;
- u_char errstr[NGX_MAX_CONF_ERRSTR];
+ u_char errstr[NGX_MAX_CONF_ERRSTR], *p;

if (value[i].len == 1) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
@@ -3533,6 +3532,13 @@ ngx_http_core_server_name(ngx_conf_t *cf
rc.err.len = NGX_MAX_CONF_ERRSTR;
rc.err.data = errstr;

+ for (p = value[i].data; p < value[i].data + value[i].len; p++) {
+ if (*p >= 'A' && *p <= 'Z') {
+ rc.options = NGX_REGEX_CASELESS;
+ break;
+ }
+ }
+
sn->regex = ngx_http_regex_compile(cf, &rc);
if (sn->regex == NULL) {
return NGX_CONF_ERROR;
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Отдача большого контента через fast_cgi

Пётр Шевцов November 25, 2009 04:02AM

Re: Отдача большого контента через fast_cgi

Alexandr Kutuzov November 25, 2009 04:16AM

Re: Отдача большого контента через fast_cgi

Alex, the Marrch Ca'at November 25, 2009 04:30AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev November 25, 2009 04:36AM

Re: Отдача большого контента через fast_cgi

Alex, the Marrch Ca'at November 27, 2009 04:46AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov November 25, 2009 07:08AM

Re: Отдача большого контента через fast_cgi

Andrew Kopeyko November 25, 2009 07:26AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov November 25, 2009 07:40AM

Re: Отдача большого контента через fast_cgi

Andrew Kopeyko November 25, 2009 07:56AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov November 26, 2009 01:56AM

Re: Отдача большого контента через fast_cgi

Andrew Kopeyko November 26, 2009 03:06AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov November 26, 2009 03:32AM

Re: Отдача большого контента через fast_cgi

Stroganov Ilya November 26, 2009 04:50AM

Re: Отдача большого контента через fast_cgi

Andrew Kopeyko November 26, 2009 08:28AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev November 26, 2009 12:24PM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov November 27, 2009 05:00AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev November 27, 2009 06:42AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov November 27, 2009 07:30AM

Re: Отдача большого контента через fast_cgi

Maxim Dounin November 27, 2009 08:10AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov November 29, 2009 06:52AM

Re: Отдача большого контента через fast_cgi

Maxim Dounin November 29, 2009 08:36AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev November 29, 2009 08:52AM

Re: Отдача большого контента через fast_cgi Attachments

Igor Sysoev November 29, 2009 09:42AM

Re: Отдача большого контента через fast_cgi

Maxim Dounin November 29, 2009 10:26AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev November 29, 2009 10:30AM

Re: Отдача большого контента через fast_cgi Attachments

Igor Sysoev November 29, 2009 10:38AM

Re: Отдача большого контента через fast_cgi

Maxim Dounin November 29, 2009 11:06AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev November 29, 2009 11:24AM

Re: Отдача большого контента через fast_cgi

Maxim Dounin November 29, 2009 02:22PM

Re: Отдача большого контента через fast_cgi

Alex, the Marrch Ca'at November 30, 2009 04:38AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev November 30, 2009 05:58AM

Re: Отдача большого контента через fast_cgi

Maxim Dounin November 29, 2009 10:48AM

Re: Отдача большого контента через fast_cgi

Maxim Dounin November 29, 2009 10:04AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev November 29, 2009 10:14AM

Re: Отдача большого контента через fast_cgi

Maxim Dounin November 29, 2009 10:38AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov December 01, 2009 06:40AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev December 01, 2009 06:48AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov December 01, 2009 07:26AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev December 01, 2009 07:34AM

Re: Отдача большого контента через fast_cgi

Peter A. Shevtsov December 01, 2009 07:48AM

Re: Отдача большого контента через fast_cgi

Igor Sysoev December 01, 2009 07:54AM

Re: Отдача большого контента через fast_cgi Attachments

Peter A. Shevtsov December 01, 2009 08:04AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 90
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready