comparison src/http/modules/ngx_http_ssi_filter_module.c @ 5228:cbd4bbe976d4

SSI: ssi_last_modified directive. The "ssi_last_modified" directive allows to preserve Last-Modified header in SSI responses. The directive is similar to SSILastModified one available in Apache: http://httpd.apache.org/docs/2.4/mod/mod_include.html#ssilastmodified Patch by Alexey Kolpakov.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 24 May 2013 22:27:23 +0400
parents f1867c1d4c63
children 74bfa803a5aa
comparison
equal deleted inserted replaced
5227:ea41bba49e8a 5228:cbd4bbe976d4
19 19
20 typedef struct { 20 typedef struct {
21 ngx_flag_t enable; 21 ngx_flag_t enable;
22 ngx_flag_t silent_errors; 22 ngx_flag_t silent_errors;
23 ngx_flag_t ignore_recycled_buffers; 23 ngx_flag_t ignore_recycled_buffers;
24 ngx_flag_t last_modified;
24 25
25 ngx_hash_t types; 26 ngx_hash_t types;
26 27
27 size_t min_file_chunk; 28 size_t min_file_chunk;
28 size_t value_len; 29 size_t value_len;
160 ngx_http_types_slot, 161 ngx_http_types_slot,
161 NGX_HTTP_LOC_CONF_OFFSET, 162 NGX_HTTP_LOC_CONF_OFFSET,
162 offsetof(ngx_http_ssi_loc_conf_t, types_keys), 163 offsetof(ngx_http_ssi_loc_conf_t, types_keys),
163 &ngx_http_html_default_types[0] }, 164 &ngx_http_html_default_types[0] },
164 165
166 { ngx_string("ssi_last_modified"),
167 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
168 ngx_conf_set_flag_slot,
169 NGX_HTTP_LOC_CONF_OFFSET,
170 offsetof(ngx_http_ssi_loc_conf_t, last_modified),
171 NULL },
172
165 ngx_null_command 173 ngx_null_command
166 }; 174 };
167 175
168 176
169 177
357 365
358 r->filter_need_in_memory = 1; 366 r->filter_need_in_memory = 1;
359 367
360 if (r == r->main) { 368 if (r == r->main) {
361 ngx_http_clear_content_length(r); 369 ngx_http_clear_content_length(r);
362 ngx_http_clear_last_modified(r);
363 ngx_http_clear_accept_ranges(r); 370 ngx_http_clear_accept_ranges(r);
364 ngx_http_clear_etag(r); 371 ngx_http_clear_etag(r);
372
373 if (!slcf->last_modified) {
374 ngx_http_clear_last_modified(r);
375 }
365 } 376 }
366 377
367 return ngx_http_next_header_filter(r); 378 return ngx_http_next_header_filter(r);
368 } 379 }
369 380
2876 */ 2887 */
2877 2888
2878 slcf->enable = NGX_CONF_UNSET; 2889 slcf->enable = NGX_CONF_UNSET;
2879 slcf->silent_errors = NGX_CONF_UNSET; 2890 slcf->silent_errors = NGX_CONF_UNSET;
2880 slcf->ignore_recycled_buffers = NGX_CONF_UNSET; 2891 slcf->ignore_recycled_buffers = NGX_CONF_UNSET;
2892 slcf->last_modified = NGX_CONF_UNSET;
2881 2893
2882 slcf->min_file_chunk = NGX_CONF_UNSET_SIZE; 2894 slcf->min_file_chunk = NGX_CONF_UNSET_SIZE;
2883 slcf->value_len = NGX_CONF_UNSET_SIZE; 2895 slcf->value_len = NGX_CONF_UNSET_SIZE;
2884 2896
2885 return slcf; 2897 return slcf;
2894 2906
2895 ngx_conf_merge_value(conf->enable, prev->enable, 0); 2907 ngx_conf_merge_value(conf->enable, prev->enable, 0);
2896 ngx_conf_merge_value(conf->silent_errors, prev->silent_errors, 0); 2908 ngx_conf_merge_value(conf->silent_errors, prev->silent_errors, 0);
2897 ngx_conf_merge_value(conf->ignore_recycled_buffers, 2909 ngx_conf_merge_value(conf->ignore_recycled_buffers,
2898 prev->ignore_recycled_buffers, 0); 2910 prev->ignore_recycled_buffers, 0);
2911 ngx_conf_merge_value(conf->last_modified, prev->last_modified, 0);
2899 2912
2900 ngx_conf_merge_size_value(conf->min_file_chunk, prev->min_file_chunk, 1024); 2913 ngx_conf_merge_size_value(conf->min_file_chunk, prev->min_file_chunk, 1024);
2901 ngx_conf_merge_size_value(conf->value_len, prev->value_len, 255); 2914 ngx_conf_merge_size_value(conf->value_len, prev->value_len, 255);
2902 2915
2903 if (ngx_http_merge_types(cf, &conf->types_keys, &conf->types, 2916 if (ngx_http_merge_types(cf, &conf->types_keys, &conf->types,