Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: X-Accel-Redirect
Alex Vorona пишет:
Igor Sysoev пишет:
On Fri, 23 Dec 2005, Dmitriy MiksIr wrote:
Понял, будем переделывать =)
Тогда к вопросу о безопасности - если некий скрипт на бекенде выдает
X-Accel-Redirect: /
То происходит зацикливание запроса...
Возможно, предусмотреть счетчик запросов или просто разрешить
принимать X-Accel-Redirect редиректы только на location помеченный
как internal.
Да, нужно сделать какое-то ограничение.
Игорь Сысоев
http://sysoev.ru
Как-то можно вообще отключить X-Accel-Redirect в определённом location
с недоверяемыми бэкендами?
Игорь, что скажете про вложенный патч?
diff -ur nginx-0.6.28.orig/src/http/ngx_http_core_module.c
nginx-0.6.28/src/http/ngx_http_core_module.c
--- nginx-0.6.28.orig/src/http/ngx_http_core_module.c 2008-03-10
16:45:41.000000000 +0200
+++ nginx-0.6.28/src/http/ngx_http_core_module.c 2008-04-12
20:18:18.000000000 +0300
@@ -506,6 +506,13 @@
offsetof(ngx_http_core_loc_conf_t, server_tokens),
NULL },
+ { ngx_string("xar"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_core_loc_conf_t, xar),
+ NULL },
+
{ ngx_string("error_page"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|NGX_CONF_2MORE,
@@ -2719,6 +2726,7 @@
lcf->log_not_found = NGX_CONF_UNSET;
lcf->recursive_error_pages = NGX_CONF_UNSET;
lcf->server_tokens = NGX_CONF_UNSET;
+ lcf->xar = NGX_CONF_UNSET;
lcf->types_hash_max_size = NGX_CONF_UNSET_UINT;
lcf->types_hash_bucket_size = NGX_CONF_UNSET_UINT;
@@ -2941,6 +2949,7 @@
ngx_conf_merge_value(conf->recursive_error_pages,
prev->recursive_error_pages, 0);
ngx_conf_merge_value(conf->server_tokens, prev->server_tokens, 1);
+ ngx_conf_merge_value(conf->xar, prev->xar, 1);
ngx_conf_merge_ptr_value(conf->open_file_cache,
prev->open_file_cache, NULL);
diff -ur nginx-0.6.28.orig/src/http/ngx_http_core_module.h
nginx-0.6.28/src/http/ngx_http_core_module.h
--- nginx-0.6.28.orig/src/http/ngx_http_core_module.h 2007-12-29
18:38:23.000000000 +0200
+++ nginx-0.6.28/src/http/ngx_http_core_module.h 2008-04-12
20:16:29.000000000 +0300
@@ -305,6 +305,7 @@
ngx_flag_t log_not_found; /* log_not_found */
ngx_flag_t recursive_error_pages; /* recursive_error_pages */
ngx_flag_t server_tokens; /* server_tokens */
+ ngx_flag_t xar; /* X-Accel-Redirect */
#if (NGX_HTTP_GZIP)
ngx_flag_t gzip_vary; /* gzip_vary */
diff -ur nginx-0.6.28.orig/src/http/ngx_http_upstream.c
nginx-0.6.28/src/http/ngx_http_upstream.c
--- nginx-0.6.28.orig/src/http/ngx_http_upstream.c 2008-03-05
09:30:44.000000000 +0200
+++ nginx-0.6.28/src/http/ngx_http_upstream.c 2008-04-12 23:52:07.000000000
+0300
@@ -1251,6 +1251,10 @@
if (u->headers_in.x_accel_redirect) {
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+ if (clcf->xar) {
+
ngx_http_upstream_finalize_request(r, u, NGX_DECLINED);
part = &u->headers_in.headers.part;
@@ -1300,6 +1304,7 @@
ngx_http_internal_redirect(r, uri, &args);
return;
+ }
}
part = &u->headers_in.headers.part;
|