Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Проблема с fastcgi
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
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;
|