ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 404 -> 500



On Sun, 27 Aug 2006, Alexander S. Zavdoveyeff wrote:

On Sun, Aug 27, 2006 at 05:17:11PM +0300, Alexander S. Zavdoveyeff wrote:
On Sun, Aug 27, 2006 at 04:38:52PM +0300, Alexander S. Zavdoveyeff wrote:
Добрый день!
Есть nginx в роли front-end и apache в роли back-end.
В nginx.conf присутствует в http:

error_page 404 /404.html;
error_page 403 /403.html;
error_page 500 502 503 504 /50x.html;

Есть server. В его конфигурации есть proxy_intercept_errors on.

Запрашиваю несуществующий файл с домена. 404.html в root у server нет.
В итоге отдаёт мне nginx не 404-ю ошибку, как должно быть, а 500-ю.
Вот кусок debug-лога:

2006/08/27 16:26:02 [debug] 1671#0: *27262 http proxy header: "Date: Sun, 27 Aug 
2006 13:26:02 GMT"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http proxy header: "Server: Apache/1.3.37 
(Unix) PHP/5.1.4"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http proxy header: "Connection: 
close"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http proxy header: "Content-Type: 
text/html; charset=iso-8859-1"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http proxy header done
2006/08/27 16:26:02 [debug] 1671#0: *27262 finalize http upstream request: 404
2006/08/27 16:26:02 [debug] 1671#0: *27262 finalize http proxy request
2006/08/27 16:26:02 [debug] 1671#0: *27262 close http upstream connection: 5
2006/08/27 16:26:02 [debug] 1671#0: *27262 event timer del: 5: 1339019836
2006/08/27 16:26:02 [debug] 1671#0: *27262 http finalize request: 404, 
"/404.html?"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http special response: 404, 
"/404.html"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http set discard body
2006/08/27 16:26:02 [error] 1671#0: *27262 rewrite or internal redirection 
cycle while sending to client, client: 89.107.226.156
, server: perec.org.ua, URL: "/stat/", upstream: "http://127.0.0.1:80/404.html";, host: 
"perec.org.ua"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http finalize request: 500, 
"/404.html?"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http special response: 500, 
"/404.html"
2006/08/27 16:26:02 [debug] 1671#0: *27262 http set discard body
2006/08/27 16:26:02 [debug] 1671#0: *27262 HTTP/1.1 500 Internal Server Error
Server: nginx/0.3.60
Date: Sun, 27 Aug 2006 13:26:02 GMT
Content-Type: text/html
Content-Length: 193
Connection: close

Если сделать proxy_intercept_errors off, то всё становится нормально,
apache отдаёт свою 404-ю.

Баг или фича?

Да, забыл.

[root[p2]@first]:[17:15]#uname -srm
FreeBSD 6.1-RELEASE-p3 i386

[root[p2]@first]:[17:15]#pkg_info | grep nginx
nginx-0.3.60        Robust and small WWW server

Я так понимаю, что это наследие ошибки, что вылезла в 0.3.59?

Да. Прилагаемый патч возращает вместо 500 последнюю ошибку, возникшую
перед циклом.


Игорь Сысоев
http://sysoev.ru
--- src/http/ngx_http_core_module.c     Fri Aug 18 18:08:58 2006
+++ src/http/ngx_http_core_module.c     Sun Aug 27 21:03:58 2006
@@ -1329,7 +1329,9 @@
     if (r->uri_changes == 0) {
         ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
                       "rewrite or internal redirection cycle");
-        ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+
+        ngx_http_finalize_request(r, r->err_status ? r->err_status:
+                                     NGX_HTTP_INTERNAL_SERVER_ERROR);
         return NGX_DONE;
     }
 


 




Copyright © Lexa Software, 1996-2009.