Search squid archive

Re: Howto make Squid config dependent on hostname?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/15/22 10:29, Hildegard Meier wrote:

we have two Squid servers (Linux hosts) and each shall have the very same config file /etc/squid/squid.conf
which is versioned and deployed from a central deployment server.
So each host shall have deployed the same files.

Each of the two shall have the other configured as sibling cache peer.

So node1 shall have
cache_peer node2.examlpe.com sibling 3128 3130

and node2 shalle have
cache_peer node1.examlpe.com sibling 3128 3130

I guess it is not so nice to have both configured with both lines together, no?

cache_peer node1.examlpe.com sibling 3128 3130
cache_peer node2.examlpe.com sibling 3128 3130

> I find that ugly.

I agree.

Squid does not support being its own peer (yet?): Upon startup, Squid validates connectivity to peers. If that validation happens before Squid starts listening for requests, the validation will (silently) fail. There are several race conditions here, but that failure is likely in a self-peering case.

In your particular use case, such self-peering also does not reflect reality. You do not want to lie to Squid about it being its own peer because Squid will try to use both configured peers, creating problems that you do not want to solve. It also duplicates peer configurations.


Does squif offer a hostname conditional if clause ?

Not yet. Squid currently only supports three kinds of conditions: true, false, and integer equality comparison (as documented).

The only build-in macro that always yields an integer is the ${process_number} macro.

Depending on your setup, you may also be able to use the ${service_name} macro if your service name is an integer, but that is kind of hacky, and I have not tested it.

For now, your best option is probably to post-process the versioned configuration to substitute your own custom macro(s). For example, your Squid startup (or deployment) stript can substitute a ${mynamespace:PeerName} macro in squid.conf.template with either true or false, depending on the node, producing squid.conf that Squid can use:

cache_peer ${mynamespace:PeerName} sibling 3128 3130


If you need to hard-code peer names or substantially different configurations for individual cache peers, then you can do something like this in the template configuration file:

if ${mynamespace:AtNode1()}
    cache_peer node2.example.com sibling 3128 3130
endif

if ${mynamespace:AtNode2()}
    cache_peer node1.example.com sibling 3128 3130
endif


FWIW, quality PRs introducing the following related features should be welcomed IMO:

* a macro function evaluating a named environment variable
* a macro function evaluating a given shell command
* string comparison in squid.conf conditionals


HTH,

Alex.


I think about something like this:

if $MY_HOSTNAME == 'node1' then
     cache_peer node2.examlpe.com sibling 3128 3130
fi

if $MY_HOSTNAME == 'node2' then
     cache_peer node1.examlpe.com sibling 3128 3130
fi
_______________________________________________
squid-users mailing list
squid-users@xxxxxxxxxxxxxxxxxxxxx
http://lists.squid-cache.org/listinfo/squid-users



[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux