在 Apache2 服务器上安装 Varnish 后出现 ERR_CONNECTION_REFUSED

5 server apache2

安装完成后光油通过sudo apt-get update && sudo apt-get install varnish,然后:

sudo sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf
sudo sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/000-default.conf
sudo sed -i 's/DAEMON_OPTS="-a \:6081 \\/DAEMON_OPTS="-a \:80 \\/g' /etc/default/varnish
sudo systemctl restart apache2.service && sudo service varnish restart 
Run Code Online (Sandbox Code Playgroud)

如果我访问在此安装之前工作的网站,我会得到:

ERR_CONNECTION_REFUSED。

这是有线的,因为 /etc/varnish/default.vcl 中的后端默认值是.port = "8080";.

  • 在 Bash 中执行varnishncsa或不varnishlog带任何输出时。

我的问题:

为什么会发生这种情况?Varnish在 80 端口上,Apache在 8080 上......还有什么可能出错?

笔记:

我还尝试将所有网站 conf 文件中的 80 更改为 8080。除了它没有帮助的事实之外,我已经意识到这是一个错误(网站是通过端口 80 访问的,因此与 000-default.conf 相比,它们的 conf 文件端口不应更改为 8080)。

Kaz*_*lfe 4

ERR_CONNECTION_REFUSED通常意味着端口被防火墙阻止,或者该端口上没有任何监听。

如果您在 Ubuntu 15.04 或更高版本上运行,则切换到systemd更改 Varnish 读取配置的方式。也就是说,它将忽略/etc/default/varnish并读取 处的服务文件/etc/systemd/system/varnish.service。因此,您的 Varnish 服务器可能在默认端口 6081 上运行。

要解决此问题,您需要覆盖systemd配置。运行这些命令:

sudo mkdir -p /etc/systemd/system/varnish.service.d
sudo nano /etc/systemd/system/varnish.service.d/customexec.conf
Run Code Online (Sandbox Code Playgroud)

这将为 Varnish 服务创建一个自定义执行文件,其中包含您的自定义设置。在此文件中,确保内容为:

[Service]
ExecStart=
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
Run Code Online (Sandbox Code Playgroud)

对要更改的配置进行任何更改,然后使用Ctrl+保存文件X

systemd通过运行以下命令重新加载服务缓存:

sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

该命令完成后,重新启动 Varnish 服务:

sudo systemctl restart varnish.service
Run Code Online (Sandbox Code Playgroud)

确保您的防火墙允许端口 80 通过,然后就可以开始了。

与往常一样,此解决方案还假设 Apache 使用端口 8080 进行所有操作 - Apache 配置中的任何位置都不应该绑定到端口 80。请仔细检查以确保情况确实如此。如果是,Apache 或 Varnish 之一将无法启动或工作。

(来源)