Баг с location в nginx-devel-0.7.42 ?
Igor Sysoev
is at rambler-co.ru
Wed Mar 18 09:03:20 MSK 2009
On Wed, Mar 18, 2009 at 12:12:22AM +0200, Konstantin Belov wrote:
> Igor Sysoev wrote:
> >On Tue, Mar 17, 2009 at 05:56:39PM +0200, Konstantin Belov wrote:
> >
> >
> >>Борис Долгов wrote:
> >>
> >>>Судя по всему, баг с определением директорий, в 0.7.40 было изменение.
> >>>
> >>>17 марта 2009 г. 18:19 пользователь Konstantin Belov
> >>><belov1985 at gmail.com <mailto:belov1985 at gmail.com>> написал:
> >>>
> >>> Борис Долгов wrote:
> >>>
> >>> А 0.7.39 работает?
> >>>
> >>> 17 марта 2009 г. 17:39 пользователь Konstantin Belov
> >>> <belov1985 at gmail.com <mailto:belov1985 at gmail.com>
> >>> <mailto:belov1985 at gmail.com <mailto:belov1985 at gmail.com>>>
> >>> написал:
> >>>
> >>>
> >>> Борис Долгов wrote:
> >>>
> >>> А какая ФС?
> >>>
> >>> Система FreeBSD 7.0, fs - UFS.
> >>>
> >>> Только не думаю, что проблема в ней. Т. к. на nginx 0.6.35 и
> >>> 0.7.33 (да и на всех старых версиях)
> >>> работает нормально. Никаких правок в движок сайта (DLE) и в
> >>> конфиг
> >>> nginx не вносилось уже давно.
> >>> Появилось именно при обновлении до 0.7.42.
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> С уважением, Борис Долгов.
> >>> icq 77556665
> >>> e-mail boris at dolgov.name <mailto:boris at dolgov.name>
> >>> <mailto:boris at dolgov.name <mailto:boris at dolgov.name>>
> >>>
> >>> telnet 80.93.57.177 80
> >>> Trying 80.93.57.177...
> >>> Connected to gr3.p8.ru <http://gr3.p8.ru>.
> >>> Escape character is '^]'.
> >>> GET /img/topbox_01.gif HTTP/1.0
> >>> host: news.ereality.ru <http://news.ereality.ru>
> >>>
> >>> HTTP/1.1 200 OK
> >>> Server: nginx/0.7.39
> >>> Date: Tue, 17 Mar 2009 15:17:21 GMT
> >>>
> >>> Content-Type: image/gif
> >>> Content-Length: 67
> >>> Last-Modified: Mon, 18 Aug 2008 16:44:25 GMT
> >>> Connection: close
> >>> Expires: Thu, 16 Apr 2009 15:17:21 GMT
> >>>
> >>> Cache-Control: max-age=2592000
> >>> Accept-Ranges: bytes
> >>>
> >>> GIF89????????????????!?H???";
> >>> Connection closed by foreign host.
> >>>
> >>>
> >>> Да, все отлично работает.
> >>>
> >>>
> >>> /usr/local/sbin/nginx739 -V
> >>> nginx version: nginx/0.7.39
> >>> built by gcc 4.2.1 20070719 [FreeBSD]
> >>>
> >>> configure arguments: --prefix=/usr/local/etc/nginx
> >>> --with-cc-opt=-I/usr/local/include --with-ld-opt=-L/usr/local/lib
> >>> --conf-path=/usr/local/etc/nginx/nginx.conf
> >>> --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid
> >>> --error-log-path=/var/log/nginx-error.log --user=www --group=www
> >>> --http-client-body-temp-path=/var/tmp/nginx/client_body_temp
> >>> --http-proxy-temp-path=/var/tmp/nginx/proxy_temp
> >>> --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp
> >>> --http-log-path=/var/log/nginx-access.log --with-http_ssl_module
> >>> --with-http_stub_status_module --with-http_sub_module
> >>> --add-module=/usr/ports/www/nginx-devel/work/nginx_upload_module-2.0.8
> >>> --add-module=/usr/ports/www/nginx-devel/work/ngx_http_upstream_keepalive-0.1
> >>>
> >>>
> >>>
> >>>
> >>>--
> >>>С уважением, Борис Долгов.
> >>>icq 77556665
> >>>e-mail boris at dolgov.name <mailto:boris at dolgov.name>
> >>>
> >>Igor Sysoev wrote:
> >>
> >>>Изменения в nginx 0.7.40
> >>>09.03.2009
> >>>
> >>> *) Изменение: модуль ngx_http_autoindex_module не показывал последний
> >>> слэш для каталогов на файловой системе XFS; ошибка появилась в
> >>> 0.7.15.
> >>> Спасибо Дмитрию Кузьменко.
> >>>
> >>>
> >>Да, возможно в этом и есть ошибка :)
> >>
> >
> >А 0.7.40 не работает ? Я пока не могу воспроизвести.
> >
> >
> >
> Собрал nginx 0.7.42 дома под Mac OS X
> Ошибка появляется при использовании переменных в root и location с
> regex (location ~* \.(foo|bar)$ {)
>
> Конфиг:
> server {
> listen 127.0.0.1:81;
>
> location ~* \.(var)$ {
> root /usr/home/www;
> expires 30d;
> }
>
> }
>
>
> $ telnet 127.0.0.1 81
> Trying 127.0.0.1...
> Connected to macbook.home.
> Escape character is '^]'.
> GET /test.var HTTP/1.0
>
> HTTP/1.1 200 OK
> Server: nginx/0.7.42
> Date: Tue, 17 Mar 2009 21:56:00 GMT
> Content-Type: application/octet-stream
> Content-Length: 5
> Last-Modified: Tue, 17 Mar 2009 21:52:38 GMT
> Connection: close
> Expires: Thu, 16 Apr 2009 21:56:00 GMT
> Cache-Control: max-age=2592000
> Accept-Ranges: bytes
>
> test
> Connection closed by foreign host.
>
>
>
>
> А вот при таком конфиге получаем ошибку:
>
>
> Конфиг:
> server {
> listen 127.0.0.1:81;
>
> set $var "/usr/home/www";
>
> location ~* \.(var)$ {
> root $var;
> expires 30d;
> }
>
> }
>
>
> $ telnet 127.0.0.1 81
> Trying 127.0.0.1...
> Connected to macbook.home.
> Escape character is '^]'.
> GET /test.var HTTP/1.0
>
> HTTP/1.1 404 Not Found
> Server: nginx/0.7.42
> Date: Tue, 17 Mar 2009 21:53:57 GMT
> Content-Type: text/html
> Content-Length: 169
> Connection: close
>
> <html>
> <head><title>404 Not Found</title></head>
> <body bgcolor="white">
> <center><h1>404 Not Found</h1></center>
> <hr><center>nginx/0.7.42</center>
> </body>
> </html>
> Connection closed by foreign host.
>
>
> В логе ошибок:
> 2009/03/17 23:53:57 [error] 6063#0: *9 open() "/usr/home/www/te" failed
> (2: No such file or directory), client: 127.0.0.1, server: macbook.home,
> request: "GET /test.var HTTP/1.0"
>
> Правда под макосью nginx возвращает 404, а не 301 :)
Прилагаемый патч должен исправить эту ошибку, и возможно, редирект.
> Кстати, при ручной сборке nginx740 -V
> nginx version: nginx/0.7.40
> built by gcc 4.2.1 20070719 [FreeBSD]
> configure arguments: --prefix=/usr/local/etc/nginx
> --with-cc-opt=-I/usr/local/include --with-ld-opt=-L/usr/local/lib
> --conf-path=/usr/local/etc/nginx/nginx740.conf
> --sbin-path=/usr/local/sbin/nginx740 --pid-path=/var/run/nginx740.pid
> --error-log-path=/var/log/nginx-error.log --user=www --group=www
> --http-client-body-temp-path=/var/tmp/nginx/client_body_temp
> --http-proxy-temp-path=/var/tmp/nginx/proxy_temp
> --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp
> --http-log-path=/var/log/nginx-access.log --with-http_ssl_module
> --with-http_stub_status_module --with-http_sub_module
> --add-module=/usr/ports/www/nginx-devel/work/nginx_upload_module-2.0.8
> --add-module=/usr/ports/www/nginx-devel/work/ngx_http_upstream_keepalive-0.1
>
> я явно указал конфиг /usr/local/etc/nginx/nginx740.conf, но в итоге
> после make install у меня перезаписался /usr/local/etc/nginx/nginx.conf :(
Спасибо, посмотрю.
> P. S. рут задается переменными, потому что так легче управлять
> конфигурацией при большом кол-ве шаблоных хостов.
--
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
Index: src/http/ngx_http_core_module.c
===================================================================
--- src/http/ngx_http_core_module.c (revision 1891)
+++ src/http/ngx_http_core_module.c (working copy)
@@ -1688,7 +1688,9 @@
last = ngx_copy(path->data, clcf->root.data, clcf->root.len);
} else {
- if (ngx_http_script_run(r, path, clcf->root_lengths->elts, ++reserved,
+ reserved += alias ? 1 : r->uri.len + 1;
+
+ if (ngx_http_script_run(r, path, clcf->root_lengths->elts, reserved,
clcf->root_values->elts)
== NULL)
{
More information about the nginx-ru
mailing list