      r->headers_out.etag = etag;
  
 -- 
-2.18.0
+2.19.0
 

From 3ed81ef9e973247d0c95bf240b3bd2e640f2605a Mon Sep 17 00:00:00 2001
From: Yegor Timoshenko <yegortimoshenko@riseup.net>
Date: Fri, 28 Sep 2018 03:27:04 +0000
Subject: [PATCH] If root is in Nix store, set ETag to its path hash

---
 src/http/ngx_http_core_module.c | 56 +++++++++++++++++++++++++++------
 1 file changed, 47 insertions(+), 9 deletions(-)

diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index c57ec00c..d996d7e3 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -1583,6 +1583,7 @@ ngx_http_set_etag(ngx_http_request_t *r)

 
     clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
 
@@ -1598,16 +1599,58 @@ ngx_http_set_etag(ngx_http_request_t *r)
     etag->hash = 1;
     ngx_str_set(&etag->key, "ETag");
 
-    etag->value.data = ngx_pnalloc(r->pool, NGX_OFF_T_LEN + NGX_TIME_T_LEN + 3);
-    if (etag->value.data == NULL) {
+    real = ngx_realpath(clcf->root.data, NULL);
+
+    if (real == NULL) {
         etag->hash = 0;
         return NGX_ERROR;
     }
 
-    etag->value.len = ngx_sprintf(etag->value.data, "\"%xT-%xO\"",
-                                  r->headers_out.last_modified_time,
-                                  r->headers_out.content_length_n)
-                      - etag->value.data;
+    #define NIX_STORE_DIR "/nix/store"
+    #define NIX_STORE_LEN ngx_strlen(NIX_STORE_DIR)
+
