私は Drupal 7 アプリケーション (3 つのバックエンド) を実行していますが、3 つの Varnish サーバーが継続的にバックエンドのフェッチを拒否しています。ここで同様のエラーを多数読みましたが、それでも問題を解決できず、503 Varnish フェッチ失敗のグル瞑想がスローされます。ここですべての投稿を読みましたが、すべてが高タイムアウトを推奨しているようで、600 秒に設定しましたが、.probe を推奨していないものも多く、round.robin (バックエンドの切り替え) があり、これが私のバックエンド構成です。
backend project1 {
.host = "myhost.ip";
.port = "80";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.probe = {
.timeout = 600s;
.interval = 10s;
.window = 5;
.threshold = 2;
.request =
"GET HTTP/1.1"
"Host: example.com"
"Connection: close";
}
}
ちなみに、エラー ログとアクセス ログを監視していたところ、このようなエラーが多すぎることに気づきましたが、偏見を持ってほしくはありません。
[info] Client prematurely closed connection (broken pipe)
そして時折
reqv failed
補足として、fast-cgi エラーがまだ発生していますが、varnish エラーとは関係がないと思います。
Primary Script unknown ......, fastcgi, upstream:127.0.0.1
fast-cgi 経由で nginx+php-fpm を実行しています。varnish がバックエンドからどのような設定を期待して取得を拒否しているのか、まったくわかりません。
以前、間違った nginx 設定によってこのエラーが発生したことがあります。私の nginx 設定は次のとおりです。
user nginx nginx;
worker_processes 4;
error_log /var/log/nginx/error.log info;
events {
worker_connections 8192;
multi_accept on;
use epoll;
}
worker_rlimit_nofile 64000;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" ';
client_header_timeout 10m;
client_max_body_size 100m;
client_body_timeout 10m;
send_timeout 10m;
client_body_buffer_size 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size 32k;
gzip on;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml;
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
output_buffers 1 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
fastcgi_send_timeout 1800;
fastcgi_read_timeout 1800;
fastcgi_connect_timeout 1800;
fastcgi_ignore_client_abort on;
keepalive_timeout 75 20;
ignore_invalid_headers on;
index index.html;
server {
listen 80;
server_name example.com;
rewrite ^(.*) http://example.com$1 permanent;
}
server {
listen 80;
server_name www.example.com;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log info;
root /var/www/public;
index index.php index.phtml index.html;
autoindex on;
gzip_types text/plain text/css application/json application/x-ja
vascript text/xml application/xml application/xml+rss text/javascript applicatio
n/javascript;
location ~ \..*/*\.php$ {
return 403;
}
location ~^/sites/.*/private/{
return 403;
}
location ~^/sites/.*/files/* {
try_files $uri @rewrite;
}
location ~ (^|/)\. {
return 403;
}
location / {
try_files $uri @rewrite;
}
location @rewrite {
rewrite ^ /index.php;
}
location ~ \.php$ {
try_files $uri @rewrite;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_keep_conn off;
include /etc/nginx/fastcgi_params;
}
location ~* \.(jpg|jpeg|css|gif|png|js|ico|xml)$ {
try_files $uri $uri/ ;
access_log off;
log_not_found off;
expires 30d;
}
}
この問題をデバッグする方向を誰か教えていただけますか? PB は Varnish ではなくバックエンドにあることは確かですが、Web サイトが時々読み込まれ、時々「バックエンド フェッチが失敗しました 503 - guru 瞑想」というひどいエラーが表示されるのはなぜかはわかりません。貴重な助言をありがとうございます。
アップデート:
修正方法は gzip を無効にすることでした。空のコンテンツがあり、ホームページにリダイレクトされていたため、gzip+ header-content-length=0 (空) によって varnish に赤旗が立てられ、varnish はサイズ 0 のものを圧縮するのは不適切であるとラベル付けしました。ヘッダーが間違っています。gzip を無効にするか、サーバー応答にコンテンツを返すと、この問題は修正されます。
答え1
あなたの場合は.request
ドキュメントを指定していないようです。そのため、Drupal サイト全体をプローブとして読み込もうとしているのだと思います。これを次のように変更できます。
"GET /sitehealth.html HTTP/1.1"
ここで、sitehealth.html
プローブが読み込むことができる単純なテキスト ファイルです。
さらにトラブルシューティングするには、プローブを完全に無効にして、違いが出るかどうかを確認してください。キャッシュを経由せずに Web サイトに直接アクセスすると、エラーが発生しますか?
基本的には、確実に動作する最もシンプルな構成を取得し、その後、何かが壊れるまで追加機能を 1 つずつ追加していきます。