]> git.sesse.net Git - remoteglot/blobdiff - default.vcl
Revert "Fix a null pointer exception in the frontend."
[remoteglot] / default.vcl
index e0fbc4555c20be4c1938a906fedee322ae4f898c..bb52d6431000f66fb22214d51c0eb1f9d89e5be9 100644 (file)
@@ -2,6 +2,7 @@
 
 vcl 4.0;
 
+# You can have multiple ones; see vcl_recv.
 backend analysis {
     .host = "127.0.0.1";
     .port = "5000";
@@ -18,8 +19,12 @@ sub vcl_recv {
     }
     if (req.http.host ~ "analysis\.sesse\.net$" && req.url ~ "^/analysis\.pl") {
         set req.backend_hint = analysis;
+        # Ignored by the backend; just to identify it in vcl_backend_response.
+        set req.http.x-analysis-backend = "backend1";
         return (hash);
     }
+    # You can check on e.g. /analysis2\.pl here if you have multiple
+    # backends; just remember to set x-analysis-backend to something unique.
 }
 
 sub vcl_deliver { 
@@ -31,6 +36,7 @@ sub vcl_deliver {
         unset resp.http.X-Powered-By;
     }
     unset resp.http.x-analysis;
+    unset resp.http.x-analysis-backend;
 }
 
 sub vcl_hash {
@@ -49,9 +55,18 @@ sub vcl_backend_response {
         if (beresp.http.content-type ~ "text" || beresp.http.content-type ~ "json") {
              set beresp.do_gzip = true;
         }
+        if (bereq.url ~ "^/hash/") {
+             set beresp.ttl = 5s;
+             set beresp.http.x-analysis = 1;
+             set beresp.http.x-analysis-backend = bereq.http.x-analysis-backend;
+             return (deliver);
+        }
         if (beresp.http.content-type ~ "json") {
              set beresp.http.x-analysis = 1;
-             ban ( "obj.http.x-analysis == 1 && obj.http.x-remoteglot-last-modified != " + beresp.http.x-remoteglot-last-modified );
+             set beresp.http.x-analysis-backend = bereq.http.x-analysis-backend;
+             ban ( "obj.http.x-analysis == 1 && " +
+                   "obj.http.x-analysis-backend == " + bereq.http.x-analysis-backend + " && " +
+                   "obj.http.x-rglm != " + beresp.http.x-rglm );
         }
         return (deliver);
     }