mirror of
https://github.com/nginx/nginx.git
synced 2025-01-05 21:53:01 -06:00
proxy_store and fastcgi_store were changed,
proxy_store_access and fastcgi_store_access were added
This commit is contained in:
parent
852e458014
commit
fbd9b4399f
@ -303,11 +303,11 @@ ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
ngx_uint_t i, right, shift, *access;
|
||||
|
||||
access = (ngx_uint_t *) (confp + cmd->offset);
|
||||
|
||||
|
||||
if (*access != NGX_CONF_UNSET_UINT) {
|
||||
return "is duplicate";
|
||||
}
|
||||
|
||||
|
||||
value = cf->args->elts;
|
||||
|
||||
*access = 0600;
|
||||
@ -328,10 +328,6 @@ ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
shift = 0;
|
||||
p += sizeof("all:") - 1;
|
||||
|
||||
} else if (ngx_strncmp(p, "off", sizeof("off") - 1) == 0) {
|
||||
*access = 0;
|
||||
return NGX_CONF_OK;
|
||||
|
||||
} else {
|
||||
goto invalid;
|
||||
}
|
||||
@ -348,7 +344,7 @@ ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
|
||||
*access |= right << shift;
|
||||
}
|
||||
|
||||
|
||||
return NGX_CONF_OK;
|
||||
|
||||
invalid:
|
||||
|
@ -124,6 +124,8 @@ static ngx_int_t ngx_http_fastcgi_script_name_variable(ngx_http_request_t *r,
|
||||
|
||||
static char *ngx_http_fastcgi_pass(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_fastcgi_store(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_fastcgi_lowat_check(ngx_conf_t *cf, void *post,
|
||||
void *data);
|
||||
|
||||
@ -201,10 +203,17 @@ static ngx_command_t ngx_http_fastcgi_commands[] = {
|
||||
NULL },
|
||||
|
||||
{ ngx_string("fastcgi_store"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
|
||||
ngx_http_fastcgi_store,
|
||||
NGX_HTTP_LOC_CONF_OFFSET,
|
||||
0,
|
||||
NULL },
|
||||
|
||||
{ ngx_string("fastcgi_store_access"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE123,
|
||||
ngx_conf_set_access_slot,
|
||||
NGX_HTTP_LOC_CONF_OFFSET,
|
||||
offsetof(ngx_http_fastcgi_loc_conf_t, upstream.store),
|
||||
offsetof(ngx_http_fastcgi_loc_conf_t, upstream.store_access),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("fastcgi_ignore_client_abort"),
|
||||
@ -1635,12 +1644,15 @@ ngx_http_fastcgi_create_loc_conf(ngx_conf_t *cf)
|
||||
* conf->upstream.schema = { 0, NULL };
|
||||
* conf->upstream.uri = { 0, NULL };
|
||||
* conf->upstream.location = NULL;
|
||||
* conf->upstream.store_lengths = NULL;
|
||||
* conf->upstream.store_values = NULL;
|
||||
*
|
||||
* conf->index.len = 0;
|
||||
* conf->index.data = NULL;
|
||||
*/
|
||||
|
||||
conf->upstream.store = NGX_CONF_UNSET_UINT;
|
||||
conf->upstream.store = NGX_CONF_UNSET;
|
||||
conf->upstream.store_access = NGX_CONF_UNSET_UINT;
|
||||
conf->upstream.buffering = NGX_CONF_UNSET;
|
||||
conf->upstream.ignore_client_abort = NGX_CONF_UNSET;
|
||||
|
||||
@ -1685,8 +1697,18 @@ ngx_http_fastcgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
|
||||
ngx_http_script_compile_t sc;
|
||||
ngx_http_script_copy_code_t *copy;
|
||||
|
||||
ngx_conf_merge_uint_value(conf->upstream.store,
|
||||
prev->upstream.store, 0);
|
||||
if (conf->upstream.store != 0) {
|
||||
ngx_conf_merge_value(conf->upstream.store,
|
||||
prev->upstream.store, 0);
|
||||
|
||||
if (conf->upstream.store_lengths == NULL) {
|
||||
conf->upstream.store_lengths = prev->upstream.store_lengths;
|
||||
conf->upstream.store_values = prev->upstream.store_values;
|
||||
}
|
||||
}
|
||||
|
||||
ngx_conf_merge_uint_value(conf->upstream.store_access,
|
||||
prev->upstream.store_access, 0600);
|
||||
|
||||
ngx_conf_merge_value(conf->upstream.buffering,
|
||||
prev->upstream.buffering, 1);
|
||||
@ -2158,6 +2180,52 @@ ngx_http_fastcgi_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
ngx_http_fastcgi_store(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_fastcgi_loc_conf_t *flcf = conf;
|
||||
|
||||
ngx_str_t *value;
|
||||
ngx_http_script_compile_t sc;
|
||||
|
||||
if (flcf->upstream.store != NGX_CONF_UNSET || flcf->upstream.store_lengths)
|
||||
{
|
||||
return "is duplicate";
|
||||
}
|
||||
|
||||
value = cf->args->elts;
|
||||
|
||||
if (ngx_strcmp(value[1].data, "on") == 0) {
|
||||
flcf->upstream.store = 1;
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
if (ngx_strcmp(value[1].data, "off") == 0) {
|
||||
flcf->upstream.store = 0;
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
/* include the terminating '\0' into script */
|
||||
value[1].len++;
|
||||
|
||||
ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
|
||||
|
||||
sc.cf = cf;
|
||||
sc.source = &value[1];
|
||||
sc.lengths = &flcf->upstream.store_lengths;
|
||||
sc.values = &flcf->upstream.store_values;
|
||||
sc.variables = ngx_http_script_variables_count(&value[1]);;
|
||||
sc.complete_lengths = 1;
|
||||
sc.complete_values = 1;
|
||||
|
||||
if (ngx_http_script_compile(&sc) != NGX_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
ngx_http_fastcgi_lowat_check(ngx_conf_t *cf, void *post, void *data)
|
||||
{
|
||||
|
@ -105,6 +105,8 @@ static char *ngx_http_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_proxy_redirect(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_proxy_store(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
|
||||
static char *ngx_http_proxy_lowat_check(ngx_conf_t *cf, void *post, void *data);
|
||||
|
||||
@ -155,10 +157,17 @@ static ngx_command_t ngx_http_proxy_commands[] = {
|
||||
NULL },
|
||||
|
||||
{ ngx_string("proxy_store"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
|
||||
ngx_http_proxy_store,
|
||||
NGX_HTTP_LOC_CONF_OFFSET,
|
||||
0,
|
||||
NULL },
|
||||
|
||||
{ ngx_string("proxy_store_access"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE123,
|
||||
ngx_conf_set_access_slot,
|
||||
NGX_HTTP_LOC_CONF_OFFSET,
|
||||
offsetof(ngx_http_proxy_loc_conf_t, upstream.store),
|
||||
offsetof(ngx_http_proxy_loc_conf_t, upstream.store_access),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("proxy_buffering"),
|
||||
@ -1497,6 +1506,8 @@ ngx_http_proxy_create_loc_conf(ngx_conf_t *cf)
|
||||
* conf->upstream.schema = { 0, NULL };
|
||||
* conf->upstream.uri = { 0, NULL };
|
||||
* conf->upstream.location = NULL;
|
||||
* conf->upstream.store_lengths = NULL;
|
||||
* conf->upstream.store_values = NULL;
|
||||
*
|
||||
* conf->method = NULL;
|
||||
* conf->headers_source = NULL;
|
||||
@ -1509,7 +1520,8 @@ ngx_http_proxy_create_loc_conf(ngx_conf_t *cf)
|
||||
* conf->rewrite_locations = NULL;
|
||||
*/
|
||||
|
||||
conf->upstream.store = NGX_CONF_UNSET_UINT;
|
||||
conf->upstream.store = NGX_CONF_UNSET;
|
||||
conf->upstream.store_access = NGX_CONF_UNSET_UINT;
|
||||
conf->upstream.buffering = NGX_CONF_UNSET;
|
||||
conf->upstream.ignore_client_abort = NGX_CONF_UNSET;
|
||||
|
||||
@ -1561,8 +1573,18 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
|
||||
ngx_http_script_compile_t sc;
|
||||
ngx_http_script_copy_code_t *copy;
|
||||
|
||||
ngx_conf_merge_uint_value(conf->upstream.store,
|
||||
prev->upstream.store, 0);
|
||||
if (conf->upstream.store != 0) {
|
||||
ngx_conf_merge_value(conf->upstream.store,
|
||||
prev->upstream.store, 0);
|
||||
|
||||
if (conf->upstream.store_lengths == NULL) {
|
||||
conf->upstream.store_lengths = prev->upstream.store_lengths;
|
||||
conf->upstream.store_values = prev->upstream.store_values;
|
||||
}
|
||||
}
|
||||
|
||||
ngx_conf_merge_uint_value(conf->upstream.store_access,
|
||||
prev->upstream.store_access, 0600);
|
||||
|
||||
ngx_conf_merge_value(conf->upstream.buffering,
|
||||
prev->upstream.buffering, 1);
|
||||
@ -2370,6 +2392,52 @@ ngx_http_proxy_redirect(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
ngx_http_proxy_store(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_proxy_loc_conf_t *plcf = conf;
|
||||
|
||||
ngx_str_t *value;
|
||||
ngx_http_script_compile_t sc;
|
||||
|
||||
if (plcf->upstream.store != NGX_CONF_UNSET || plcf->upstream.store_lengths)
|
||||
{
|
||||
return "is duplicate";
|
||||
}
|
||||
|
||||
value = cf->args->elts;
|
||||
|
||||
if (ngx_strcmp(value[1].data, "on") == 0) {
|
||||
plcf->upstream.store = 1;
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
if (ngx_strcmp(value[1].data, "off") == 0) {
|
||||
plcf->upstream.store = 0;
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
/* include the terminating '\0' into script */
|
||||
value[1].len++;
|
||||
|
||||
ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
|
||||
|
||||
sc.cf = cf;
|
||||
sc.source = &value[1];
|
||||
sc.lengths = &plcf->upstream.store_lengths;
|
||||
sc.values = &plcf->upstream.store_values;
|
||||
sc.variables = ngx_http_script_variables_count(&value[1]);;
|
||||
sc.complete_lengths = 1;
|
||||
sc.complete_values = 1;
|
||||
|
||||
if (ngx_http_script_compile(&sc) != NGX_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
ngx_http_proxy_lowat_check(ngx_conf_t *cf, void *post, void *data)
|
||||
{
|
||||
|
@ -372,7 +372,7 @@ ngx_http_upstream_init(ngx_http_request_t *r)
|
||||
cln->data = r;
|
||||
u->cleanup = &cln->handler;
|
||||
|
||||
u->store = (u->conf->store != 0);
|
||||
u->store = (u->conf->store || u->conf->store_lengths);
|
||||
|
||||
ngx_http_upstream_connect(r, u);
|
||||
}
|
||||
@ -2029,7 +2029,9 @@ ngx_http_upstream_store(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
||||
|
||||
#if !(NGX_WIN32)
|
||||
|
||||
if (ngx_change_file_access(temp->data, u->conf->store) == NGX_FILE_ERROR) {
|
||||
if (ngx_change_file_access(temp->data, u->conf->store_access)
|
||||
== NGX_FILE_ERROR)
|
||||
{
|
||||
err = ngx_errno;
|
||||
failed = ngx_change_file_access_n;
|
||||
name = temp->data;
|
||||
@ -2052,13 +2054,24 @@ ngx_http_upstream_store(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
||||
err = ngx_errno;
|
||||
failed = ngx_set_file_time_n;
|
||||
name = temp->data;
|
||||
|
||||
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ngx_http_map_uri_to_path(r, &path, &root, 0);
|
||||
if (u->conf->store_lengths == NULL) {
|
||||
|
||||
ngx_http_map_uri_to_path(r, &path, &root, 0);
|
||||
|
||||
} else {
|
||||
if (ngx_http_script_run(r, &path, u->conf->store_lengths->elts, 0,
|
||||
u->conf->store_values->elts)
|
||||
== NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"upstream stores \"%s\" to \"%s\"", temp->data, path.data);
|
||||
@ -2074,8 +2087,8 @@ ngx_http_upstream_store(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
||||
|
||||
if (err == NGX_ENOENT) {
|
||||
|
||||
err = ngx_create_full_path(path.data, ngx_dir_access(u->conf->store));
|
||||
|
||||
err = ngx_create_full_path(path.data,
|
||||
ngx_dir_access(u->conf->store_access));
|
||||
if (err == 0) {
|
||||
if (ngx_rename_file(temp->data, path.data) != NGX_FILE_ERROR) {
|
||||
return;
|
||||
|
@ -118,7 +118,7 @@ typedef struct {
|
||||
size_t temp_file_write_size_conf;
|
||||
|
||||
ngx_uint_t next_upstream;
|
||||
ngx_uint_t store;
|
||||
ngx_uint_t store_access;
|
||||
|
||||
ngx_bufs_t bufs;
|
||||
|
||||
@ -141,6 +141,10 @@ typedef struct {
|
||||
ngx_str_t location;
|
||||
ngx_str_t url; /* used in proxy_rewrite_location */
|
||||
|
||||
ngx_array_t *store_lengths;
|
||||
ngx_array_t *store_values;
|
||||
|
||||
signed store:2;
|
||||
unsigned intercept_404:1;
|
||||
unsigned change_buffering:1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user