1. 27 Feb, 2023 3 commits
  2. 24 Feb, 2023 1 commit
    • Nils Goroll's avatar
      Also test ESI onerror with max_esi_depth reached · 054215b5
      Nils Goroll authored
      With onerror=abort, the request is aborted as with a bad return code.
      
      With onerror=continue, the include remains empty
      
      This already behaved like I expected it to, this vtc merely adds
      an explicit test.
      054215b5
  3. 20 Feb, 2023 8 commits
    • Nils Goroll's avatar
      Forbid .via backend stacking for now · 8289ea01
      Nils Goroll authored
      suggested by Dridi
      8289ea01
    • Nils Goroll's avatar
      9db64085
    • Nils Goroll's avatar
      Explicitly test connection pooling works properly · 884ef9da
      Nils Goroll authored
      Connect to s1 and s2 via v2.
      
      Note on the v2 VCL: We use this varnish instance as a PROXY protocol
      aware forwarder, which takes the address to connect to from the
      incoming PROXY header (to mimic haproxy instead of requiring it).
      
      Previously, we used debug.dyn(), but that does not work with two
      different backends because it does not create different backend
      instances, so connection pooling fails on this level, unrelated to the
      actual test subject.
      
      We avoid this issue by an explicit VCL implementation.
      884ef9da
    • Geoff Simmons's avatar
      Add the .authority field to backend definitions. · 15a8e6c0
      Geoff Simmons authored
      If the .via field is also set, then the value of .authority is set
      as the authority TLV in the PROXY header. This gives the "true"
      backend (usually the ssl-onloader) the opportunity to set the SNI
      (HostName field) from the TLV value, for the TLS handshake with the
      remote backend.
      
      This mandates that PROXYv2 is always used with a via backend (since
      only version 2 supports TLVs).
      
      If the value of .authority is the empty string, then the TLV is not
      sent. If .authority is not set for the backend, then fall back to
      .host_header, which itself may have been a fallback to .host. Note
      that if neither .authority nor .host_header is set, and .host is
      set to an IP address, then the IP address is forwarded as the SNI
      value, which is not permitted for HostName (RFC4366 ch 3.1). So
      users are advised to set either .authority or .host_header, or set
      .authority="", when .via is set.
      
      Usage note with haproxy:
      
      To enable sending SNI when haproxy is used as a TLS onloader, ``sni
      fc_pp_authority`` needs to be used with the backend configuration.
      
      Full usage example with haproxy 2.2:
      
      listen sslon
      	mode	tcp
      	maxconn	1000
      	bind	/shared/varnish_haproxy/haproxy_sslon accept-proxy mode 777
      	stick-table type ip size 100
      	stick	on dst
      	server	s00 0.0.0.0:443 ssl ca-file /etc/ssl/certs/ca-bundle.crt alpn http/1.1 sni fc_pp_authority
      	server	s01 0.0.0.0:443 ssl ca-file /etc/ssl/certs/ca-bundle.crt alpn http/1.1 sni fc_pp_authority
      	# ...
      
      A higher number of servers improves TLS session caching.
      15a8e6c0
    • Nils Goroll's avatar
      via backends in VCL · da539902
      Nils Goroll authored
      Due to the intialization order, only native vcl backends can be used
      from vcl as via backends. As directors are defined in vcl_init which
      gets to run only after the native backends have been initialized,
      directors can not be refered to from a backend.
      da539902
    • Nils Goroll's avatar
      Basic "via" backends support · 6e22b815
      Nils Goroll authored
      In varnish-cache, the deliberate decision has been made to not support
      TLS from the same address space as varnish itself, see
      doc/sphinx/phk/ssl_again.rst
      
      So the obvious way to connect to TLS backends is to use a TLS
      "onloader" (a term coined by @slimhazard as in the opposite of
      "offloader"), which turns a clear connection into a TLS connection.
      
      Before this change, this required additional configuration in two
      places: An address/port or UDS path needs to be uniquely allocated for
      each destination address, the specific onloader configuration has to
      be put in place and a varnish backend pointing to the onloader needs
      to be added. All of this for each individual backend. Also, this
      requirement prevents any use of dynamic backends with a TLS onloader.
      
      haproxy, however, offers a convenient and elegant way to avoid this
      configuration overhead: The PROXY protocol can also be used to
      transport the destination address which haproxy is to connect to if a
      server's address is unspecified (IN_ADDR_ANY / 0.0.0.0). The
      configuration template for this use case looks like this (huge thank
      you to @wtarreau for pointing out this great option in haproxy):
      
      listen clear-to-ssl
              bind /my/path/to/ssl_onloader accept-proxy
              balance roundrobin
              stick-table type ip size 100
              stick on dst
              server s0 0.0.0.0:443 ssl ca-file /etc/ssl/certs/ca-bundle.crt
              server s1 0.0.0.0:443 ssl ca-file /etc/ssl/certs/ca-bundle.crt
              server s2 0.0.0.0:443 ssl ca-file /etc/ssl/certs/ca-bundle.crt
              # .. approximately as many servers as expected peers
              # for improved tls session caching
      
      With this setup, by connecting to /my/path/to/ssl_onloader and sending
      the address to make a TLS connection to in a PROXY header (as the
      server address / port), we can reduce the configuration overhead
      outside varnish substantially. In particular, we do not require a path
      / port per destination dynamic TLS backends become possible
      
      This patch implements the basis for simple means of configuring such
      an ssl onloader:
      
      backends can be created with an additional "via" director, which has
      to resolve to a simple backend. The connection is then made to that
      address and the actual endpoint address is sent in an additional PROXY
      header.  Notice that sending yet another proxy header to the actual
      backend is unaffected. Despite using the same format, the two proxy
      headers are semantically different: The first, here coined the
      "preamble", is the address to make the connection to while the
      (optional) second proxy header continues to contain the addresses of
      the connection to varnish.
      
      Future improvements on the roadmap:
      
      * resolution of the "via" backend at the time the connection is made:
        This will allow for fault tolerance and load balancing of via
        backends
      
      * Cascade the health check: If the "via" backend is probed / set down,
        any backends using it could be set unhealthy also.
      
      * Timeouts: The "via" backend's timeouts could define maximum values
        for any connections made through it
      
      Tivia:
      
      To future Varnish-Cache historians, this patch originates from #2850
      and went through three more iterations, making it a likely candidate
      for the PR with the longest turnaround time of 1543 days.
      6e22b815
    • Dridi Boukelmoune's avatar
      doc: Document the $Alias stanza · 0e8180c1
      Dridi Boukelmoune authored
      0e8180c1
    • Dridi Boukelmoune's avatar
      doc: Typo · 7cca67cd
      Dridi Boukelmoune authored
      7cca67cd
  4. 13 Feb, 2023 1 commit
    • William Wilson's avatar
      vnum: Work around uninitialized variable in test code · f088fc4d
      William Wilson authored
      The value should always be set, because we already assign zero on error,
      but it might escape (pun intended) the vigilance of the compiler.
      
      Instead of always making `VNUM_2bytes()` assign its second parameter, it
      was decided that fixing the test case would be enough since we already
      require error handling.
      f088fc4d
  5. 10 Feb, 2023 1 commit
    • Nils Goroll's avatar
      Improve the Unix jail documentation · 4995d793
      Nils Goroll authored
      Document that the daemon and worker user have to share their primary
      group.
      
      Provide an exmaple of how to set up a system for the default users.
      
      Note: I am well aware of the commands in pkg-varnish-cache, but they
      use Linux specific useradd syntax. The commands given hopefully are
      portable - I tested them on Solaris and Linux.
      4995d793
  6. 08 Feb, 2023 10 commits
  7. 07 Feb, 2023 2 commits
  8. 01 Feb, 2023 3 commits
    • Guillaume Quintard's avatar
      fetch: Backends are in charge of printing headers · 70633086
      Guillaume Quintard authored
      The current backend implementation reads the headers all at once, as a
      big buffer, then manually chops them up, and later on, in the startfetch
      step, Varnish loops through all the headers and prints them.
      
      This is inconvenient for custom backends that are most likely going to
      use http_SetH() (directly or via http_SetHeader(), http_PrinfHeader() or
      others), which also prints the headers being added. As a result, those
      implementations end up logging the header twice.
      
      To work around the issue we can push the burden of logging the beresp
      headers onto the backend implementation. It does change one test, as
      now the Timestamp:Beresp log record appears after the headers instead
      of before.
      70633086
    • Poul-Henning Kamp's avatar
      Give the ESI doc a wash · 1cbf4873
      Poul-Henning Kamp authored
      1cbf4873
    • Dridi Boukelmoune's avatar
      vtc: Drive-by redesign of c55 · c607e9b1
      Dridi Boukelmoune authored
      There's no point checking that a resp header is unset when we don't
      rxresp in the first place... There were other things that could be
      simplified.
      c607e9b1
  9. 31 Jan, 2023 10 commits
  10. 30 Jan, 2023 1 commit
    • Dridi Boukelmoune's avatar
      jail_solaris: Retire mgt_param.[gu]id usage · 9b42ca37
      Dridi Boukelmoune authored
      This fields were never set in the first place so they went away in #3888.
      
      We don't have SunOS coverage on Github so I noticed it after the facts.
      I did look at the Solaris jail but somehow missed that those fields were
      used there as well. Chances are that the deleted statements never ran in
      the first place, otherwise the assertions would have triggered.
      
      If the solaris jail should set[gu]id(2) as part of its privileges drop,
      it should probably grow new sub-options similar to the ones in the unix
      jail.
      
      Refs #3888
      9b42ca37