Varnish配置后Apache虚拟主机DocumentRoot异常问题求助
确认Varnish转发时保留原始Host头
Apache虚拟主机依赖Host请求头匹配站点,若Varnish转发时修改或丢失该头,Apache会自动 fallback 到默认站点。检查/etc/varnish/default.vcl的vcl_recv段,强制保留客户端发送的Host头:sub vcl_recv { # 禁止Varnish自动修改Host头,确保完整传递给Apache set req.http.Host = req.http.host; # 其他业务规则... } backend default { .host = "127.0.0.1"; .port = "8080"; }修正Apache虚拟主机的监听端口
由于Apache已改为监听8080,需确保对应虚拟主机配置的<VirtualHost>指令包含8080端口(Virtualmin生成的配置文件通常在/etc/apache2/sites-available/目录下):<VirtualHost *:8080> ServerName your-domain.com DocumentRoot /home/dewebshop/magento2/pub # 其余Virtualmin生成的配置项... </VirtualHost>执行
sudo a2ensite your-domain.conf启用站点,再重启Apache:sudo systemctl restart apache2修复Varnish健康检查404问题
默认健康检查未携带正确Host头,导致Apache返回默认站点的404。修改backend配置,给健康检查指定目标域名的Host头:backend default { .host = "127.0.0.1"; .port = "8080"; .probe = { .url = "/"; .request = "GET / HTTP/1.1" "Host: your-domain.com" "Connection: close"; .interval = 5s; .timeout = 2s; } }重启Varnish生效配置
执行sudo systemctl restart varnish,用curl -I http://your-domain.com测试:若返回X-Varnish头,且内容来自/home/dewebshop/magento2/pub,则配置生效。锁定Virtualmin的Apache端口设置
进入Virtualmin后台的服务器配置 > 网站选项,将Apache监听端口设为8080,防止Virtualmin自动重置为80端口覆盖配置。
内容的提问来源于stack exchange,提问作者user1978645

