comparison src/http/ngx_http_core_module.c @ 4749:613750237b36

Entity tags: the "etag" directive. It allows to disable generation of nginx's own entity tags, while still handling ETags in cache properly. This may be useful e.g. if one want to serve static files from servers with different ETag generation algorithms.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 09 Jul 2012 14:53:42 +0000
parents 192f54280a7a
children 1c5e2e4d5b35
comparison
equal deleted inserted replaced
4748:192f54280a7a 4749:613750237b36
648 ngx_conf_set_flag_slot, 648 ngx_conf_set_flag_slot,
649 NGX_HTTP_LOC_CONF_OFFSET, 649 NGX_HTTP_LOC_CONF_OFFSET,
650 offsetof(ngx_http_core_loc_conf_t, chunked_transfer_encoding), 650 offsetof(ngx_http_core_loc_conf_t, chunked_transfer_encoding),
651 NULL }, 651 NULL },
652 652
653 { ngx_string("etag"),
654 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
655 ngx_conf_set_flag_slot,
656 NGX_HTTP_LOC_CONF_OFFSET,
657 offsetof(ngx_http_core_loc_conf_t, etag),
658 NULL },
659
653 { ngx_string("error_page"), 660 { ngx_string("error_page"),
654 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF 661 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
655 |NGX_CONF_2MORE, 662 |NGX_CONF_2MORE,
656 ngx_http_core_error_page, 663 ngx_http_core_error_page,
657 NGX_HTTP_LOC_CONF_OFFSET, 664 NGX_HTTP_LOC_CONF_OFFSET,
1809 1816
1810 1817
1811 ngx_int_t 1818 ngx_int_t
1812 ngx_http_set_etag(ngx_http_request_t *r) 1819 ngx_http_set_etag(ngx_http_request_t *r)
1813 { 1820 {
1814 ngx_table_elt_t *etag; 1821 ngx_table_elt_t *etag;
1822 ngx_http_core_loc_conf_t *clcf;
1823
1824 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
1825
1826 if (!clcf->etag) {
1827 return NGX_OK;
1828 }
1815 1829
1816 etag = ngx_list_push(&r->headers_out.headers); 1830 etag = ngx_list_push(&r->headers_out.headers);
1817 if (etag == NULL) { 1831 if (etag == NULL) {
1818 return NGX_ERROR; 1832 return NGX_ERROR;
1819 } 1833 }
3537 clcf->log_not_found = NGX_CONF_UNSET; 3551 clcf->log_not_found = NGX_CONF_UNSET;
3538 clcf->log_subrequest = NGX_CONF_UNSET; 3552 clcf->log_subrequest = NGX_CONF_UNSET;
3539 clcf->recursive_error_pages = NGX_CONF_UNSET; 3553 clcf->recursive_error_pages = NGX_CONF_UNSET;
3540 clcf->server_tokens = NGX_CONF_UNSET; 3554 clcf->server_tokens = NGX_CONF_UNSET;
3541 clcf->chunked_transfer_encoding = NGX_CONF_UNSET; 3555 clcf->chunked_transfer_encoding = NGX_CONF_UNSET;
3556 clcf->etag = NGX_CONF_UNSET;
3542 clcf->types_hash_max_size = NGX_CONF_UNSET_UINT; 3557 clcf->types_hash_max_size = NGX_CONF_UNSET_UINT;
3543 clcf->types_hash_bucket_size = NGX_CONF_UNSET_UINT; 3558 clcf->types_hash_bucket_size = NGX_CONF_UNSET_UINT;
3544 3559
3545 clcf->open_file_cache = NGX_CONF_UNSET_PTR; 3560 clcf->open_file_cache = NGX_CONF_UNSET_PTR;
3546 clcf->open_file_cache_valid = NGX_CONF_UNSET; 3561 clcf->open_file_cache_valid = NGX_CONF_UNSET;
3798 ngx_conf_merge_value(conf->recursive_error_pages, 3813 ngx_conf_merge_value(conf->recursive_error_pages,
3799 prev->recursive_error_pages, 0); 3814 prev->recursive_error_pages, 0);
3800 ngx_conf_merge_value(conf->server_tokens, prev->server_tokens, 1); 3815 ngx_conf_merge_value(conf->server_tokens, prev->server_tokens, 1);
3801 ngx_conf_merge_value(conf->chunked_transfer_encoding, 3816 ngx_conf_merge_value(conf->chunked_transfer_encoding,
3802 prev->chunked_transfer_encoding, 1); 3817 prev->chunked_transfer_encoding, 1);
3818 ngx_conf_merge_value(conf->etag, prev->etag, 1);
3803 3819
3804 ngx_conf_merge_ptr_value(conf->open_file_cache, 3820 ngx_conf_merge_ptr_value(conf->open_file_cache,
3805 prev->open_file_cache, NULL); 3821 prev->open_file_cache, NULL);
3806 3822
3807 ngx_conf_merge_sec_value(conf->open_file_cache_valid, 3823 ngx_conf_merge_sec_value(conf->open_file_cache_valid,