[centos@staging03 ~]$ sudo netstat -plnt
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:80 0.0.0.0:* LISTEN 3600/httpd
tcp 0 0 127.0.0.2:80 0.0.0.0:* LISTEN 1574/varnishd
tcp 0 0 172.31.22.60:80 0.0.0.0:* LISTEN 1539/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1251/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1501/master
tcp 0 0 127.0.0.1:443 0.0.0.0:* LISTEN 3600/httpd
tcp 0 0 127.0.0.1:6082 0.0.0.0:* LISTEN 1573/varnishd
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3468/php-fpm
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 1229/memcached
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1061/redis-server 1
tcp 0 0 :::22 :::* LISTEN 1251/sshd
tcp 0 0 :::3306 :::* LISTEN 1383/mysqld
我检查了一下我的服务器出了什么问题,然后:
curl 127.0.0.1:80
我有:
401 需要授权需要授权
此服务器无法验证您是否有权访问所请求的文档。您提供的凭据有误(例如密码错误),或者您的浏览器无法提供所需的凭据。
Apache/2.2.15 (CentOS) 服务器位于 127.0.0.1 端口 80
在另一台一切正常的服务器上,我收到空白响应。所以我认为这就是为什么我从 Apache 收到 500 varnish 错误的原因。
在 Apache 日志中,我执行卷曲操作时并没有真正得到任何东西,但在此之前我得到了:
[Wed Oct 27 17:02:25 2021] [notice] caught SIGTERM, shutting down
[Wed Oct 27 17:02:25 2021] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Oct 27 17:02:25 2021] [notice] Digest: generating secret for digest authentication ...
[Wed Oct 27 17:02:25 2021] [notice] Digest: done
[Wed Oct 27 17:02:25 2021] [notice] FastCGI: process manager initialized (pid 3602)
[Wed Oct 27 17:02:25 2021] [notice] Apache/2.2.15 (Unix) DAV/2 mod_fastcgi/2.4.6 configured -- resuming normal operations
因此,看来 FastCGI 配置正确,而我从 Apache 收到的问题很奇怪,是身份验证问题。我还能做些什么来查明问题所在吗?
Varnish 提供以下功能:
12 TxHeader b X-Varnish: 1537309960
12 RxProtocol b HTTP/1.1
12 RxStatus b 500
12 RxResponse b Internal Server Error
12 RxHeader b Date: Wed, 27 Oct 2021 21:14:18 GMT
12 RxHeader b Server: Apache/2.2.15 (CentOS)
12 RxHeader b Expires: Wed, 11 Jan 1984 05:00:00 GMT
12 RxHeader b Cache-Control: no-cache, must-revalidate, max-age=0
但是,我无法检查 500 内部服务器错误是什么,因为 php 的错误日志似乎是空的。
答案1
待办事项 阿帕奇
- 增加 Apache 中的日志级别
- 测试对 Apache 中静态文件的 HTTP 调用与对 PHP 的调用之间的区别
- 以更高的详细程度监控 Apache 的错误日志
目标是通过curl http://127.0.0.1
在主页或某些静态文件上运行来从 Apache 获取 HTTP 200。
TODO 清漆
- 将 Varnish 升级到受支持和维护的版本
- 在 VCL 中添加后端探测
- 通过 VSL 监控后端运行状况
根据您分享的 VSL 输出,我可以看到您正在运行一个旧版本的 Varnish。请参阅https://www.varnish-software.com/developers/tutorials/installing-varnish-centos/了解如何安装Varnish 6.0 LTS在 CentOS 上。
您不仅拥有安全的 Varnish 版本,而且您的 VSL 工具(例如varnishlog
)也比您正在运行的版本优越得多。
以下是具有健康探测的后端的示例:
backend default {
.host = "127.0.0.1";
.port = "8080";
.probe = {
.url = "/";
.timeout = 2s;
.interval = 5s;
.window = 10;
.threshold = 5;
}
}
这将允许您持续监控后端的运行状况。您可以使用以下命令执行此操作:
sudo varnishlog -g raw -i Backend_health
输出将帮助您了解后端的行为方式以及它向 Varnish 返回哪个 HTTP 状态代码。
将此与从 Apache 获取 HTTP 200 状态代码的请求相结合,您将非常接近最终解决方案。