Проблема с fastcgi

Igor Sysoev is at rambler-co.ru
Sat Mar 8 21:02:09 MSK 2008


On Sat, Mar 08, 2008 at 08:15:45PM +0300, Igor Sysoev wrote:

> On Sat, Mar 08, 2008 at 04:58:52PM +0000, David Mzareulyan wrote:
> 
> > Игорь, а зачем это разрешать/запрещать отдельным ключом? Какие проблемы 
> > могут быть с постами в статику?
> > Ну то есть, понятно, что если там в самом деле статика, то надо выдать 
> > ошибку. Но если там 404-й обработчик -- почему нельзя доверить ему решение?
> 
> Сейчас модуль, выдающий статику, не знает, есть ли для 404 специальный
> обработчик или нет. Хотя, по идее, его и подобных ему можно этому обучить.
> Наверное, я так и сделаю.

Патч.


-- 
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
Index: src/http/ngx_http_core_module.c
===================================================================
--- src/http/ngx_http_core_module.c	(revision 1240)
+++ src/http/ngx_http_core_module.c	(working copy)
@@ -3559,6 +3559,10 @@
             return NGX_CONF_ERROR;
         }
 
+        if (err->status == 404) {
+            lcf->error_page_404 = 1;
+        }
+
         err->overwrite = (overwrite >= 0) ? overwrite : err->status;
 
         err->uri = uri;
Index: src/http/ngx_http_core_module.h
===================================================================
--- src/http/ngx_http_core_module.h	(revision 1240)
+++ src/http/ngx_http_core_module.h	(working copy)
@@ -250,6 +250,8 @@
     unsigned      auto_redirect:1;
     unsigned      alias:1;
 
+    unsigned      error_page_404:1;
+
     /* array of inclusive ngx_http_core_loc_conf_t */
     ngx_array_t  *locations;
 
Index: src/http/modules/ngx_http_static_module.c
===================================================================
--- src/http/modules/ngx_http_static_module.c	(revision 1240)
+++ src/http/modules/ngx_http_static_module.c	(working copy)
@@ -58,10 +58,6 @@
     ngx_open_file_info_t       of;
     ngx_http_core_loc_conf_t  *clcf;
 
-    if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) {
-        return NGX_HTTP_NOT_ALLOWED;
-    }
-
     if (r->uri.data[r->uri.len - 1] == '/') {
         return NGX_DECLINED;
     }
@@ -71,10 +67,19 @@
         return NGX_DECLINED;
     }
 
-    rc = ngx_http_discard_request_body(r);
+    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
 
-    if (rc != NGX_OK) {
-        return rc;
+    if (r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD)) {
+
+        rc = ngx_http_discard_request_body(r);
+
+        if (rc != NGX_OK) {
+            return rc;
+        }
+
+    } else if (r->method != NGX_HTTP_POST || !clcf->error_page_404) {
+
+        return NGX_HTTP_NOT_ALLOWED;
     }
 
     log = r->connection->log;
@@ -94,8 +99,6 @@
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
                    "http filename: \"%s\"", path.data);
 
-    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
-
     of.test_dir = 0;
     of.valid = clcf->open_file_cache_valid;
     of.min_uses = clcf->open_file_cache_min_uses;


More information about the nginx-ru mailing list