[squid-users] server persistent connections and cache

Alex Rousskov rousskov at measurement-factory.com
Fri Jul 27 01:31:04 UTC 2018


On 07/26/2018 05:47 PM, Vishali Somaskanthan wrote:

> By re-use I meant to say that the server-connection S (TCP + SSL) is
> re-used across 2 client connections (C1 and C2), from the same client
> one after the other is torn down. I, presume that
> “/server_persistent_connection on/” allows for such a use-case.

server_persistent_connection controls whether a single Squid-to-server
connection can carry more than one request. It does not (or should not)
control re-pinning.


> Is my
> understanding that Pinning means binding C1 to S and then if C1 is
> closed, we unpin and then later if C2 is created, we can pin it again to S?

IIRC, a lot of code assumes that pinning ties C1 and S connection
lifetimes together. I do not know whether all code assumes that. I do
not know whether there is consensus that "same lifetimes" is the correct
approach for all pinned connections.


> There is some confusion in my understanding this statement – “pinning
> _all_ SslBump connections is easier than pinning some of them”, because
> I see different behaviors when I bump at Step 1 (case 1) vs bump at Step
> 2 (case 2).

Just because something is easier in retrospect, does not mean it was
easy or even clear to the developers writing bits and pieces of that
code. There are a lot of inconsistencies (and bugs) that we are slowly
weeding out.


> Case 1: We see that no pinning happens i.e. pinConnection() is not
> called at all. C1->S gets established, C1 is closed and then C2 re-uses S
> 
> Case 2: We see that pinning happens i.e. httpsPeeked() calls
> pinConnection(). Here, C1->S gets established. Closing C1 from the
> client brings down S. Later, opening C2 opens a new server-connection S.
> 
> Is this the expected behavior?

The code just happens to work this way (evidently). It is not something
I would rely on until the matter is discussed and settled.


HTH,

Alex.


> On Thu, Jul 26, 2018 at 2:13 PM, Alex Rousskov wrote:
> 
>     On 07/26/2018 02:49 PM, Vishali Somaskanthan wrote:
> 
>     > 1. Are there any security reasons behind /pinning the connection/
>     when a
>     > peek is done at Step1
> 
>     I doubt there is some fundamental _security_ reason to pin if you bump
>     without forwarding the TLS client information to the server. The reasons
>     to pin in that case include:
> 
>     * honoring client and server blind tunneling expectations
>       (which may result in better compatibility or even security);
> 
>     * development convenience (pinning _all_ SslBump connections is easier
>       than pinning some of them).
> 
> 
>     > Why is that done?
> 
>     I speculate it was done for the reasons stated in the above bullets.
> 
> 
>     > 2.a)  what is the scenario where a pinned connection can be reused? 
> 
>     When a previously established Squid-to-server connection is used for the
>     next request on the corresponding client-to-Squid connection.
> 
> 
>     >    b) Which configure option is used to enable /#if
>     STRICT_ORIGINAL_DST ?/
> 
>     There is no user-friendly way to control that macro AFAICT. You may
>     define it when building Squid from sources (e.g., by passing
>     -DSTRICT_ORIGINAL_DST=1 to the compiler via CPPFLAGS). Please do not
>     misinterpret my response as an indication that this is an officially
>     supported feature.
> 
> 
>     HTH,
> 
>     Alex.
> 
> 
> 
>     > On Wed, Jul 18, 2018 at 5:00 PM, Alex Rousskov wrote:
>     >
>     >     On 07/18/2018 03:03 PM, Vishali Somaskanthan wrote:
>     >
>     >     > I had a problem after sending too many requests to the same
>     server where
>     >     > my persistence stopped working suddenly.
>     >
>     >     Please note that there are many reasons why a proxy may close a
>     >     connection. For pinned to-server connections (like those
>     created by
>     >     SslBump), it may not be possible to open a new to-server
>     connection so
>     >     Squid should close both from-client and to-server connections.
>     >
>     >     In general, a client should not rely on a connections staying
>     persistent
>     >     except in some very unusual/special circumstances.
>     >
>     >
>     >     > 1. What is the relationship between the caching and the
>     persistence
>     >     > connection established?
>     >
>     >     Virtually none. Caching decisions are done primarily based on
>     request
>     >     and response headers.
>     >
>     >
>     >     > 2. When will squid use cached results and when will it not
>     if the cache
>     >     > deny all directive weren't specified.
>     >
>     >     Squid will deliver a response from the cache when HTTP rules
>     and Squid
>     >     configuration allow a hit. The details are too complex to
>     document here.
>     >
>     >
>     >     > 3. However, this didn't work fully. Even with /cache deny all/
>     >     > directive, persistence wasn't working when I peeked at the
>     sslBump step
>     >     > 1 and then Bumped. 
>     >     > Persistence worked only when I directly did sslbump allow
>     all (without
>     >     > peeking at first step).
>     >
>     >     Bumping step should not affect connection persistence AFAICT.
>     I do not
>     >     know why it does in your case. This could be a Squid bug or a
>     >     misunderstanding. If you can reproduce, Squid logs should contain
>     >     reasons for each connection closure (but it may be difficult
>     to find).
>     >
>     >


More information about the squid-users mailing list