varnish daemon not listening on configured port
Solution 1
You need to change the varnish start parameters in the systemd service definition as well. You could edit the line starting with ExecStart
in the service defintion file:
sudo vi /lib/systemd/system/varnish.service
Modifying this file however, has the disadvantage that it will not be updated in future updates of the package. Alternatively, as suggested in the comments, you could create a systemd drop in file, which is the preferred way of adding settings to systemd definitions.
# create the drop in directory
sudo mkdir /etc/systemd/system/varnish.service.d
# create the drop in file. The name is irrelevant, as long as it ends in .conf
sudo vi /etc/systemd/system/varnish.service.d/mysettings.conf
Here you only need to add the settings you want do change, everything else will be loaded from the default definition file.
Example:
[Service]
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
This is the default line, change it as you need
Afterwards, tell systemctl to reload it's config files and to restart the service
sudo systemctl daemon-reload
sudo service varnish restart
Varnish should now listen on port 80.
Solution 2
Note that the drop-in should have an empty ExecStart= Otherwise you will get an error starting the service (duplicate ExecStart)
sudo mkdir /etc/systemd/system/varnish.service.d
sudo nano /etc/systemd/system/varnish.service.d/varnishd.conf
With
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T <YOUR WEBSERVER IP>:8081 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
Related videos on Youtube
Bruno
Life is full of surprises : I leaved an unsatisfying post of director in a (low) tech firm form an enthusiastic post of web engineer in a wonderful startup. Having to (re)discover the basis 10 years later, it's rafraishing how things have beautifully evolved !
Updated on September 18, 2022Comments
-
Bruno over 1 year
I'm trying to install varnish on ubuntu 16.04,
I read several article none are working. From what I read, since ubuntu 15.04, the way of configuring varnish has changed (because of systemd).
Now on I've got a real mess wich don't work :
/etc/default/varnish :
DAEMON_OPTS="-a :80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s malloc,256m"
/etc/varnish/default.vcl (normally it points to a host pointing to 127.0.0 and port 8080, but for debuging purpose I modified it to an external domain) vcl 4.0;
# Default backend definition. Set this to point to your content server. backend default { .host = "www.varnish-cache.org"; .port = "80"; }
/etc/apache2/ports.conf
Listen 8080
grep -R 'ExecStart=/usr/sbin/varnishd' /etc/
/etc/systemd/system/varnish.service:ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m /etc/systemd/system/varnish.service.d/customexec.conf:ExecStart=/usr/sbin/varnishd -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m /etc/systemd/system/multi-user.target.wants/varnish.service:ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
/lib/systemd/system/varnish.service :
GNU nano 2.5.3 Fichier : /lib/systemd/system/varnish.service [Unit] Description=Varnish HTTP accelerator Documentation=https://www.varnish-cache.org/docs/4.1/ man:varnishd [Service] Type=simple LimitNOFILE=131072 LimitMEMLOCK=82000 ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m ExecReload=/usr/share/varnish/reload-vcl ProtectSystem=full ProtectHome=true PrivateTmp=true PrivateDevices=true [Install] WantedBy=multi-user.target
service --status-all | grep varnish
[ - ] varnish [ + ] varnishlog [ + ] varnishncsa
after a
sudo service varnish stop sudo service varnish start
The varnish service is not listening on
http://127.0.0.1:80/
, before a reboot, it listend onhttp://127.0.0.1:6081/
but it don't work no more ... I don't know what to do more...
EDIT : after a reboot, nothing works,
if I do :
systemctl status varnish
● varnish.service - Varnish HTTP accelerator Loaded: loaded (/etc/systemd/system/varnish.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/varnish.service.d └─customexec.conf Active: inactive (dead) since jeu. 2017-01-05 14:48:09 CET; 1s ago Docs: https://www.varnish-cache.org/docs/4.1/ man:varnishd Process: 5077 ExecStart=/usr/sbin/varnishd -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m (code=exited, status=0/SUCCESS) Main PID: 5077 (code=exited, status=0/SUCCESS) janv. 05 14:48:09 xubuntu-16 systemd[1]: Started Varnish HTTP accelerator.
service --status-all | grep varnish
[ - ] varnish [ - ] varnishlog [ - ] varnishncsa
if I sudo :
varnishd -d -f /etc/varnish/default.vcl
, thenstart
, everything works fine... until i quit the cli
solved thanks to @Gerald Schneider response. I post the steps I had to do :
sudo apt remove varnish sudo apt-get purge varnish # I manually remove the 3 files in created in /etc/systemd/system/* sudo apt install varnish sudo nano /lib/systemd/system/varnish.service # put the rigth conf sudo nano /etc/varnish/default.vcl #put the rigth conf sudo systemctl daemon-reload sudo service varnish restart
and everything works fine! the magic is in the
/lib/systemd/system/varnish.service
file, other online resources that I found made me make think it is elsewhere, so beware of the online (outdated) tutorials!-
Mike Q over 5 yearsProbably needed to just remove your previous drop in -> . /etc/systemd/system/varnish.service
-
-
Bruno over 7 yearsI've done this, this file contain :
[...] [Unit] Description=Varnish HTTP accelerator Documentation=https://www.varnish-cache.org/docs/4.1/ man:varnishd [Service] Type=simple LimitNOFILE=131072 LimitMEMLOCK=82000 ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m ExecReload=/usr/share/varnish/reload-vcl [...]
-
dortegaoh over 7 yearsMaybe you should restore the default configuration files for apache and varnish and start over. I've set this up to test it and I only had to change the apache config to listen on port 8080 and the single line in varnish.service. Nothing else.
-
Bruno over 7 yearsthanks, it worked! I add the steps to uninstall in my post
-
Stephen about 7 yearsThis is the wrong approach. Systemd unit files in /lib/systemd should not be edited, they should be overridden with drop-in files in /etc/systemd
-
HBruijn over 5 years
systemctl edit varnish.service
automates creating unit file override drop-ins for you