【问题标题】:Patching varnish 4.0.3 and port configuration修补varnish 4.0.3和端口配置
【发布时间】:2022-11-29 00:51:17
【问题描述】:

我正在帮助 IT 部门更新他们当前的 Drupal 网站并协助更新他们的 RedHat 网络服务器。除了编辑我的主文件夹和 Apache docroot 之外,我的 Linux 用户帐户没有很多权限。我被要求按照此补丁 https://varnish-cache.org/security/VSV00001.html#vsv00001 中的说明帮助修补他们当前的 Varnish 4.0.3 实例。我必须让他们的系统管理员在服务器上做大部分事情,因为我的帐户无权访问大多数命令。

我要求系统管理员使用 patch doucmentation 中的说明将 vcc_allow_inline 参数设置为 true。这是他们运行的完整命令

/opt/rh/rh-varnish4/root/usr/sbin/varnishd -pvcc_allow_inline_c=true -b www-test-cms:80

现在该网站无法正确解析。在接触 varnish 之前,Drupal 在端口 81 上运行 Varnish

127.0.0.1:81

这是当前模块设置的样子 Drupal Varnish module IP settings

这是 Netstat 之前和之后的输出

[root@www-test-cms ~]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      1775/zabbix_agentd
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1786/php-fpm: maste
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      1762/memcached
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      117531/varnishd
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1794/httpd
tcp        0      0 127.0.0.1:81            0.0.0.0:*               LISTEN      117530/varnishd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1772/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2302/master
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1794/httpd
tcp6       0      0 :::10050                :::*                    LISTEN      1775/zabbix_agentd
tcp6       0      0 :::33060                :::*                    LISTEN      2096/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      2096/mysqld
tcp6       0      0 :::11211                :::*                    LISTEN      1762/memcached
tcp6       0      0 :::80                   :::*                    LISTEN      117531/varnishd
tcp6       0      0 :::6556                 :::*                    LISTEN      1763/xinetd

[root@www-test-cms ~]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1761/php-fpm: maste
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      1777/memcached
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6004/varnishd
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1779/httpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1780/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2292/master
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1779/httpd
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      1767/zabbix_agentd
tcp        0      0 127.0.0.1:35588         0.0.0.0:*               LISTEN      6003/varnishd
tcp6       0      0 :::3306                 :::*                    LISTEN      2031/mysqld
tcp6       0      0 :::11211                :::*                    LISTEN      1777/memcached
tcp6       0      0 :::80                   :::*                    LISTEN      6004/varnishd
tcp6       0      0 :::6556                 :::*                    LISTEN      1774/xinetd
tcp6       0      0 :::10050                :::*                    LISTEN      1767/zabbix_agentd
tcp6       0      0 :::33060                :::*                    LISTEN      2031/mysqld

所以很明显这是一个端口问题。系统管理员对网络服务器知之甚少,我对网络文件夹之外的知识知之甚少,我们很难将两者联系起来!我希望对这里发生的事情有更多的解释。先感谢您。

【问题讨论】:

    标签: apache drupal drupal-7 varnish


    【解决方案1】:

    分析 netstat 输出

    在你的安装 Varnish 在端口 8081 上运行。在你的设置仍然如此。在你的设置 httpd 进程在用于 HTTPS 的端口 443 和用于纯 HTTP 的 8080 上运行。

    查看您的 varnishd 运行时配置

    唯一看起来不同的是使用 -b 选项来配置 Varnish 连接的后端。目前这是-b www-test-cms:80

    根据 netstat 输出,正确的端口是 8080 而不是 80。但是,我不太喜欢通过运行时参数来执行此操作,因为 VCL 文件本身也可能包含此信息。

    更好的 varnishd 运行时配置

    作为参考,这里是基于 RHEL 的 Varnish 设置的开箱即用 systemd 设置:https://www.varnish-software.com/developers/tutorials/installing-varnish-red-hat-enterprise-linux/#systemd-configuration

    正如https://www.varnish-software.com/developers/tutorials/installing-varnish-red-hat-enterprise-linux/#modifying-the-listening-port-and-cache-size 所指定的,您需要将-a 属性设置为已配置的监听地址。

    这是一个根据 netstat 输出为 Varnish 端口设置量身定制的示例:

    varnishd 
          -a :80 
          -a :81 
          -f /etc/varnish/default.vcl 
          -s malloc,2g 
          -pvcc_allow_inline_c=true
    
    • varnishd监听端口8081(我不知道为什么需要81
    • 使用 -f 选项链接到包含后端定义和缓存规则的 VCL 文件
    • 将缓存大小设置为 2GB。使用 -s 选项(根据您自己的需要调整)
    • 通过设置 -pvcc_allow_inline_c=true 启用内联 C(除非绝对必要,否则避免启用内联 C)

    我强烈反对这种设置

    虽然我可以想出一个解决方案,但我强烈建议不要使用修补程序。

    虽然修复安全问题很重要,但自行修补此版本的 Varnish 并不是一个好主意。

    Varnish 4 已停产,Varnish 5 和 Varnish 6 的某些版本也是如此。

    如果你查看https://varnish-cache.org/security/index.html,你会发现有更多的 VSV。也许你认为你的版本不受其中大多数的影响,因为 Varnish 4 是 EOL,安全问题不再为 v4 修复。

    升级到 Varnish 6.0 LTS

    我建议您升级到更新版本的 Varnish。 Varnish Cache 6.0 LTS 是我推荐的一款。有关 RHEL 的安装指南,请参阅 https://www.varnish-software.com/developers/tutorials/installing-varnish-red-hat-enterprise-linux

    VCL 兼容性如何?

    VCL文件的兼容性当然不能保证,不过只要在VCL文件开头加上vcl 4.1;版本标记,然后尝试在本地运行VCL代码,看看在varnishd启动时是否编译通过。

    您可以尝试将服务器上/etc/varnish/default.vcl 中的代码复制到您的本地系统,并在本地 Docker 容器中进行测试。有关启动官方 Varnish Docker 映像的更多信息,请参阅https://www.varnish-software.com/developers/tutorials/running-varnish-docker/

    最终结果

    一旦您知道 VCL 文件适用于 Varnish 6.0 LTS,您就可以进一步升级您的 Varnish 服务器。

    为 Varnish 的 EOL 版本打补丁只是一个坏主意,硬着头皮升级到受支持的现代版本。

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多