捲曲導致 500 清漆錯誤時,Apache 2.2 需要 401 授權
[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
我檢查以調查我的伺服器有什麼問題,當我這樣做時:
捲曲 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 得到的問題是一個身份驗證問題,很奇怪。我還能做些什麼來確定問題所在嗎?
清漆提供以下內容:
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 Internal Server Error 是什麼,因為 php 的錯誤日誌似乎是空的。
所有阿帕奇
- 增加 Apache 中的日誌級別
- 測試在 Apache 中對靜態文件的 HTTP 呼叫和對 PHP 的呼叫之間的區別
- 使用增加的詳細程度監控 Apache 的錯誤日誌
curl http://127.0.0.1
目標是通過在首頁或某個靜態文件上執行 Apache 來獲得 HTTP 200 。所有清漆
- 將 Varnish 升級到受支持和維護的版本
- 在 VCL 中添加後端探針
- 通過 VSL 監控後端執行狀況
根據您共享的 VSL 輸出,我可以看到您正在執行一個古老版本的 Varnish。請參閱https://www.varnish-software.com/developers/tutorials/installing-varnish-centos/了解如何在 CentOS 上安裝Varnish 6.0 LTS 。
您不僅擁有安全的 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 狀態程式碼的任務結合起來,您將非常接近最終解決方案。