如何为我的 symfony 应用程序设置 varnish?

问题描述 投票:0回答:1

我想在我的 symfony 应用程序中使用 varnish 进行缓存控制,

我使用过虚拟主机,这是我的虚拟主机文件。

<VirtualHost *:80>     
ServerAdmin webmaster@localhost     
ServerName varnish-local.com     
ServerAlias www.varnish-local.com     
DocumentRoot /var/www/html/varnish-software/public     
DirectoryIndex index.php      
<Directory /var/www/html/varnish-software/public>         
Options Indexes FollowSymLinks         
AllowOverride All         
Require all granted     
</Directory>      

ErrorLog ${APACHE_LOG_DIR}/symfony_error.log     
CustomLog ${APACHE_LOG_DIR}/symfony_access.log combined </VirtualHost>
vcl 4.1;
backend default {
    .host = "127.0.0.1";
    .port = "8000";
}

sub vcl_recv {
    if (req.method == "PURGE") {
        return (purge);
    }
}

sub vcl_backend_response {
    if (beresp.status == 404 || beresp.status == 500) {
        set beresp.ttl = 0s;
    }
}

sub vcl_deliver {
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
}

当我从 symfony:serve 命令运行我的应用程序时,我看到我的清漆服务器正在运行 http://127.0.0.1:6081/ 但是我如何将它与我的 8000 端口一起使用,以及如何使用与我的虚拟主机一起使用。

当我运行 varnish-local.com 时,我想从 varnish 服务器获取数据,因此我想在 varnish-local.com 中使用 varnish,而不是使用 127.0.0.1:6081。

请问有人可以提供有关此问题的信息吗,谢谢。

php symfony integration varnish
1个回答
0
投票

在端口 8000 上运行 Varnish

Varnish 的内置监听端口确实是

6081
。这样做是为了避免与现有服务器发生端口冲突。

-a
运行时参数可用于将其设置为
80
8000
等值。这是一个示例
varnishd
命令,其中包括常见的运行时参数:

varnishd \
      -a :8000 \
      -a localhost:8443,PROXY \
      -p feature=+http2 \
      -f /etc/varnish/default.vcl \
      -s malloc,256m

此命令可能是您的 systemd 配置的一部分。您可以选择直接在本地机器上运行此命令进行测试。

更好的VCL文件

您使用的 VCL 代码非常简单。我建议您使用我们在 Varnish Software 创建的示例 VCL 文件:https://www.varnish-software.com/developers/tutorials/example-vcl-template/

虽然它不是以框架为中心,但它确实开箱即用。我自己将它用于我构建的 Symfony 网站。

如果您在 Symfony 应用程序中使用特定的 cookie,则可能需要一些特定于站点的调整。

虚拟主机和清漆

Varnish 支持开箱即用的虚拟主机,并将创建一个哈希值,根据 URL 和

Host
标头来标识缓存对象。

HTTP 使用这个

Host
标头在单个服务器上强制执行多个域。这基本上就是虚拟主机的作用。

© www.soinside.com 2019 - 2024. All rights reserved.