我正在帮助一个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文件夹以外的东西,我们很难连接这两个服务器!我想多解释一下这里发生了什么。提前谢谢你。
1条答案
按热度按时间8fsztsew1#
分析netstat输出
在 * 之前 * 的设置中,Varnish在端口
80
和81
上运行。在 * 之后 * 的设置中,情况仍然如此。在 * 之前 * 的设置中,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
侦听端口80
和81
(我不知道为什么需要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只是一个坏主意,只要咬紧牙关,升级到一个支持的现代版本。