Mercurial > hg > nginx
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, |