apache 4.0.3修补清漆及端口配置

ibrsph3r  于 2022-11-30  发布在  Apache
关注(0)|答案(1)|浏览(94)

我正在帮助一个IT部门更新他们当前的Drupal网站,并协助更新他们的RedHat Web服务器。我的Linux用户帐户除了编辑我的主文件夹和Apache文档根目录外,没有太多权限。他们要求我按照www.example.com上的补丁说明,帮助他们修补Varnish 4.0.3的当前示例https://varnish-cache.org/security/VSV00001.html#vsv00001。我不得不要求他们的系统管理员在因为我的帐户无法访问大多数命令。
我要求系统管理员使用补丁文档中的说明将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

很明显,这是一个端口问题。系统管理员不太了解Web服务器,我也不太了解Web文件夹以外的东西,我们很难连接这两个服务器!我想多解释一下这里发生了什么。提前谢谢你。

8fsztsew

8fsztsew1#

分析netstat输出

在 * 之前 * 的设置中,Varnish在端口8081上运行。在 * 之后 * 的设置中,情况仍然如此。在 * 之前 * 的设置中,httpd进程在端口443上运行(HTTPS),在端口8080上运行(纯HTTP)。

查看varnishd运行时配置

唯一看起来不同的是使用-b选项来配置Varnish连接到的后端。
根据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文件
  • 使用-s选项将高速缓存的大小设置为2GB(根据您自己的需要进行调整)
  • 通过设置-pvcc_allow_inline_c=true启用内联C(除非绝对必要,否则避免启用内联C)

我强烈建议不要使用此设置

虽然我可以提出一个解决方案,我强烈建议不要打补丁过程。
虽然修复安全问题很重要,但自己修补此版本的Varnish并不是一个好主意。

上光油4、上光油5和上光油6的某些版本已报废。

如果你看一下https://varnish-cache.org/security/index.html,你会发现有更多的VSV。也许你认为你的版本不受大多数VSV的影响,因为Varnish 4已经停产了,v4的安全问题不再被修复了。

升级到清漆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服务器。
修补一个EOL版本的Varnish只是一个坏主意,只要咬紧牙关,升级到一个支持的现代版本。

相关问题